R 如何做一般订单
我有一个数据库作为数据框架,我想对所有列进行排序,但保留元素之间的关系。 例如,如果我执行以下操作:R 如何做一般订单,r,R,我有一个数据库作为数据框架,我想对所有列进行排序,但保留元素之间的关系。 例如,如果我执行以下操作: > 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
> 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
如果有人能帮我解决这个小问题,我将不胜感激。关于。我们可以使用
do.call
和order
对数据集的所有列进行排序
DF[do.call(order, DF),]
如果我们使用
tidyverse
,则arrange\u 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
伟大的非常感谢你,阿克伦。我还有一个关于sqldf包的问题,我想知道你是否可以帮我解决另一件事。问题:如何保持初始行顺序。@您在问题中没有提到
sqldf
部分。从你的评论中不清楚你在说什么expect@akrun:这是今天我第二次意识到答案已经由你发布了,当时我还在编辑我的:)在dplyr
中还有arrange\u all()
,所以只要DF%>%arrange\u all()
就可以了,非常感谢你的帮助