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.
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.
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")]
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.
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(.)))
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())
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