使用多列高级排序data.frame

时间:2016-03-23 03:51:42

标签: r

#data as follows;
values <- c(1,1,1,0,1,1)
values2 <- c(0,1,0,1,0,1)
values3 <- c(0,0,0,0,0,1)

Data <- data.frame(name = names, value = values, value2 = values2, value3 = values3)
Data[order(Data[,4], Data[,3], Data[,2]),] # basic ordering of data in base R

问题1。

有没有办法调用Data[order(Data[,4:2],),]之类的东西,因此命令所有列与上面的代码相同。 (我有大约100个二进制列,我想用它来订购由{1600}行和大约1620列组成的data.frame,所以我的代码看起来像这样Data[order(Data[,21:1620],),])

问题2。

如果我想在不同的配置中订购“共现”,请考虑一下;

smallData[order(smallData[,4], smallData[,3], smallData[,2]),]

结果:

   name value value2 value3
1  paul     1      0      0
3  dave     1      0      0
5  john     1      0      0
4  will     0      1      0
2  mark     1      1      0
6 steph     1      1      1

相反,我想

   name value value2 value3
1  paul      1      0      0
3  dave      1      0      0
5  john      1      0      0
2  mark      1      1      0
6 steph      1      1      1
4  will      0      1      0

1 个答案:

答案 0 :(得分:3)

1)dplyr base::order的{​​{1}}版本为arrange,在需要的内容方面稍微灵活一些,尤其是SE版本:

library(dplyr)
arrange_(Data, .dots = names(Data)[4:1])
#   names values values2 values3
# 1  john      1       0       0
# 2  mark      1       0       0
# 3  paul      1       0       0
# 4  will      0       1       0
# 5  dave      1       1       0
# 6 steph      1       1       1

2)您可以通过反转排序values的方向来安排:

arrange(Data, desc(values), values2)
#   names values values2 values3
# 1  paul      1       0       0
# 2  john      1       0       0
# 3  mark      1       0       0
# 4  dave      1       1       0
# 5 steph      1       1       1
# 6  will      0       1       0