R:根据降序求和对数据帧中的列名重新排序

时间:2018-03-13 12:10:09

标签: r dataframe

对于类似于下面的数据框(但有更多变量),我想根据变量的降序和对列进行重新排序。所以在我的例子中,列顺序应该是VAR3(sum = 7),VAR2(sum = 5),VAR1(sum = 4)。我知道我可以手动完成,但我的实际数据框有太多的变量。

dat <- data.frame(VAR1=c(0,1,0,1,0,0,1,1,0),
           VAR2=c(1,1,0,1,0,0,1,0,1), 
           VAR3=c(0,1,1,1,1,0,1,1,1))

  VAR1 VAR2 VAR3
1    0    1    0
2    1    1    1
3    0    0    1
4    1    1    1
5    0    0    1
6    0    0    0
7    1    1    1
8    1    0    1
9    0    1    1

2 个答案:

答案 0 :(得分:2)

dat <- data.frame(VAR1=c(0,1,0,1,0,0,1,1,0),
              VAR2=c(1,1,0,1,0,0,1,0,1), 
              VAR3=c(0,1,1,1,1,0,1,1,1))


dat1 <- dat[,names(sort(colSums(dat), decreasing = TRUE))]

dat1
   VAR3 VAR2 VAR1
1    0    1    0
2    1    1    1
3    1    0    0
4    1    1    1
5    1    0    0
6    0    0    0
7    1    1    1
8    1    0    1
9    1    1    0

答案 1 :(得分:1)

dat[,names(sort(colSums(dat), decreasing = T))]

colSums提供 dat

的所有列的总和
> colSums(dat)

VAR1 VAR2 VAR3 
 4    5    7 

按照总和值的递减顺序对其进行排序

> sort(colSums(dat), decreasing = T)

VAR3 VAR2 VAR1 
7    5    4 

按照确切的顺序获取名称,并以相同的顺序显示 dat

> dat[,names(sort(colSums(dat), decreasing = T))]

    VAR3 VAR2 VAR1
1    0    1    0
2    1    1    1
3    1    0    0
4    1    1    1
5    1    0    0
6    0    0    0
7    1    1    1
8    1    0    1
9    1    1    0