To prawdopodobnie proste pytanie, ale nie wiem, jak uporządkować kolumny alfabetycznie.
test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2))
# C A B
# 1 0 4 1
# 2 2 2 3
# 3 4 4 8
# 4 7 7 3
# 5 8 8 2
Lubię porządkować kolumny według nazw kolumn alfabetycznie, aby osiągnąć
# A B C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Dla innych chcę mieć własne zdefiniowane zamówienie:
# B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8
Zwróć uwagę, że moje zbiory danych są ogromne i zawierają 10000 zmiennych. Dlatego proces musi być bardziej zautomatyzowany.
test[ order(names(test)) ]
colnames
: kończy się to wezwaniemnames
dodata.frame
.Oto obowiązkowa
dplyr
odpowiedź na wypadek, gdyby ktoś chciał to zrobić z fajką.źródło
test%>%select(b,sort(names(.)))
umieści go jako „b, a, c”test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))
Można wykonać prostą następującą zamianę funkcji (ale tylko wtedy, gdy ramka danych nie ma wielu kolumn):
test <- test[, c("A", "B", "C")]
dla innych:
test <- test[, c("B", "A", "C")]
źródło
sortowanie według nazw kolumn może działać łatwo.
źródło
Jeśli chcesz tylko jedną lub więcej kolumn z przodu i nie obchodzi Cię kolejność pozostałych:
require(dplyr) test %>% select(B, everything())
źródło
Aby konkretna kolumna była pierwsza, a reszta alfabetycznie, zaproponowałbym takie rozwiązanie:
test[, c("myFirstColumn", sort(setdiff(names(test), "myFirstColumn")))]
źródło
Alternatywną opcją jest użycie
str_sort()
z biblioteki stringr z argumentemnumeric = TRUE
. Spowoduje to prawidłowe uporządkowanie kolumn zawierających liczby nie tylko alfabetycznie :str_sort(c("V3", "V1", "V10"), numeric = TRUE)
# [1] V1 V3 V11
źródło
Podobna do innej składni powyżej, ale do nauki - czy możesz sortować według nazw kolumn?
sort(colnames(test[1:ncol(test)] ))
źródło
[1:ncol(test)]
Nie robi nic tutaj, to tylko sposób pisać dłużejsort(colnames(test))
.Oto, co odkryłem, aby osiągnąć podobny problem z moim zestawem danych.
Najpierw zrób to, o czym James wspomniał powyżej, tj
Po drugie, użyj funkcji Everything () w dplyr, aby przesunąć określone kolumny (np. „D”, „G”, „K”) na początek ramki danych, umieszczając po nich kolumny uporządkowane alfabetycznie.
źródło