【问题标题】:R: Reorder column names in a dataframe based on descending sumR:根据降序对数据框中的列名重新排序
【发布时间】:2018-03-13 12:10:08
【问题描述】:

对于类似于下面的数据框(但有更多变量),我想根据变量的降序对列进行重新排序。所以在我的示例中,列顺序应该是 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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    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
    

    【讨论】:

    • 或更短:dat[order(colSums(dat), decreasing = T)]
    • 非常感谢。我不知道 colsums 函数.......使它变得如此容易;-)
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多