我有一个数据库作为数据框,我想订购所有列,但保持元素之间的关系。 例如,如果我执行以下操作:
> DF
A B C D
1 11 2 432 4
2 11 3 432 4
3 13 4 241 5
4 42 5 2 3
5 51 5 332 2
6 51 5 332 1
7 51 5 332 1
> DF=DF[order(A,B,C,D),]
> DF
A B C D
1 11 2 432 4
2 11 3 432 4
3 13 4 241 5
4 42 5 2 3
6 51 5 332 1
7 51 5 332 1
5 51 5 332 2
好的,这就是我想要的(注意最后两行),但我希望有一个通用的解决方案,与列数无关。我尝试了以下方法,但它不起作用。
> DF=DF[order(colnames(DF)),]
> DF
A B C D
1 11 2 432 4
2 11 3 432 4
3 13 4 241 5
4 42 5 2 3
如果有人能帮我解决这个小问题,我将不胜感激。问候。
答案 0 :(得分:4)
我们可以将do.call
与order
一起用于对数据集的所有列进行排序
DF[do.call(order, DF),]
如果我们使用tidyverse
,则arrange_at
将采用列名称
library(dplyr)
DF %>%
arrange_at(vars(names(.)))
#or as @Sotos commented
#arrange_all()
#or
#arrange(!!! rlang::syms(names(.)))
# A B C D
#1 11 2 432 4
#2 11 3 432 4
#3 13 4 241 5
#4 42 5 2 3
#5 51 5 332 1
#6 51 5 332 1
#7 51 5 332 2