【问题标题】:How to sort an R data frame by the standard deviation of certain columns?如何按某些列的标准差对 R 数据框进行排序?
【发布时间】:2011-10-26 08:32:02
【问题描述】:

在 R 中,我有一个包含 9 个命名列的数据框,用于描述实验数据。第一列包含基因名称,接下来的 8 列包含基因表达值。最终目标是按照表达式值的标准差对数据框进行排序。

基本上,我想计算第 2 到 9 列的标准差,并根据这些值对整个数据框进行排序。我该怎么做?

我的第一个想法是添加带有标准偏差的第十列,使用sd() 函数计算,然后对表格进行排序,最后再次删除第十列。但我不知道该怎么做。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    关键命令是:applyorder,以及一些行重排。

    ##Create some dummy data
    ##You should always try and include some test data in your questions
    R> dd = as.data.frame(matrix(rnorm(80), ncol=8))
    R> dd = cbind(GENE = LETTERS[1:10], dd)
    R> head(dd, 2)
       GENE    V1     V2      V3      V4      V5     V6      V7      V8
     1    A 1.693 1.2977  1.2220  0.4877 -1.7076 1.7796  0.7980 0.08643
     2    B 1.987 0.1545 -0.2173 -0.5959  0.7274 0.2757 -0.5391 0.56054
    
    ##Work out the sd for columns 2 to 9 using apply
    ##Use "order" to reorder the rows
    R> dd1 = dd[order(apply(dd[,2:9], 1, sd)),]
    ##Check the new order
    R> apply(dd1[,2:9], 1, sd)
         8      7      5      9      2      1      4      6     10      3 
    0.5197 0.7128 0.8149 0.8210 0.8624 0.8808 0.9804 1.2058 1.5086 1.6191 
    R> head(dd1, 2)
      GENE      V1      V2     V3      V4      V5      V6       V7       V8
    8    H -0.3869  0.6206  0.279 -0.3867 -0.4915 -1.0979 -0.07696 -0.09097
    7    G -1.2966 -1.1279 -1.082 -0.4739  0.2717 -0.1365  0.38614  0.38445
    

    【讨论】:

      【解决方案2】:

      这是计算列标准差的最快和最短的方法:

      colSds = sqrt(diag(cov(data_matrix)))
      

      由于协方差矩阵的对角线由每个变量的方差组成,我们执行以下操作:

      • 使用cov 计算协方差矩阵
      • 使用diag提取矩阵的对角线
      • 使用sqrt 对对角线值求平方根以获得标准差

      然后您可以使用colSds[column_index] 获取特定列sd

      【讨论】:

        猜你喜欢
        • 2023-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 2015-04-29
        • 2016-07-28
        • 2022-08-20
        • 2013-09-05
        • 1970-01-01
        相关资源
        最近更新 更多