Sortuj kolumny ramki danych według nazwy kolumny

To prawdopodobnie proste pytanie, ale nie wiem, jak porzą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 po nazwach 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łasny zdefiniowany porządek:

#   B A C
# 1 4 1 0
# 2 2 3 2
# 3 4 8 4
# 4 7 3 7
# 5 8 2 8

Proszę zauważyć, że moje zbiory danych są ogromne, z 10000 zmiennych. Proces ten musi być więc bardziej zautomatyzowany.

Author: Henrik, 2011-09-07

5 answers

Możesz użyć order na names i użyć tego, aby uporządkować kolumny podczas podzestawu:

test[ , order(names(test))]
  A B C
1 4 1 0
2 2 3 2
3 4 8 4
4 7 3 7
5 8 2 8

Dla własnego zdefiniowanego zamówienia, będziesz musiał zdefiniować własne mapowanie nazw do zamówienia. Zależy to od tego, jak chcesz to zrobić, ale Zamiana dowolnej funkcji z order powyżej powinna dać pożądany wynik.

Możesz na przykład spojrzeć na uporządkować wiersze ramki danych według wektora docelowego, który określa pożądane kolejność , tzn. można match ramkę danych names względem wektora docelowego zawierającego żądaną kolejność kolumn.

 95
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:33
test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2))

Za pomocą prostej następującej funkcji można wykonać zastąpienie (ale tylko wtedy, gdy ramka danych nie ma wielu kolumn):

test <- test[, c("A", "B", "C")]

Dla innych:

test <- test[, c("B", "A", "C")]
 12
Author: MANOJ KUMAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 20:26:58
  test[,sort(names(test))]

Sortowanie na nazwach kolumn może działać łatwo.

 2
Author: Shalini Baranwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-19 05:00:59

Oto obowiązkowa dplyr ODPOWIEDŹ na wypadek, gdyby ktoś chciał to zrobić z rurą.

test %>% 
    select(sort(names(.)))
 0
Author: Andrew Brēza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 17:56:10

Oto, co odkryłem, aby osiągnąć podobny problem z moim zestawem danych.

Najpierw zrób to, co Jakub wspomniał powyżej, tzn.

test[ , order(names(test))]

Po drugie, użyj funkcji everything() w dplyr, aby przenieść określone kolumny (np. "D", "G", "K") na początku ramki danych, umieszczając kolumny uporządkowane alfabetycznie po tych.

select(test, D, G, K, everything())

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

 -2
Author: Brit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 05:13:26