【问题标题】:Find mean within data.fame [duplicate]在 data.fame 中查找均值 [重复]
【发布时间】:2014-08-24 10:35:38
【问题描述】:

我有这张桌子:

3702    GO:0009611  0.682
3711    GO:0009611  35.418
4081    GO:0009611  18.072
3702    GO:0033554  0.400
3702    GO:0006812  0.378
3702    GO:0006412  0.373
3702    GO:0009058  0.346
3702    GO:0051641  0.312
29760   GO:0009611  28.697

我不关心第一列。第 2 列重复了一些值。我想要得到的是data.frame,其中第一列是我的初始表的第 2 列的值,而我的输出的第二列将是我的初始表的第 3 列的相应平均值。

类似:

GO:0051179  1.7398
GO:0016311  2.1595
GO:0010467  1.45633
GO:0044093  15.483
GO:0006811  2.4175
GO:0044238  0.927667
GO:0006812  3.0138
GO:0006807  1.048

事实上,我已经使用 awk 得到了这个输出:

awk '{print $2"\t"$3}' BP.txt | awk '{hash1[$1]+=$2} ; {hash2[$1]+=1} END {for (x in hash1) {print x"\t"hash1[x]/hash2[x]}}'

但不知道如何在 R 中执行此操作。

【问题讨论】:

    标签: r dataframe mean


    【解决方案1】:

    您可以使用data.table。如果df 是您的data.frame,则执行以下操作

    library(data.table) ## 1.9.2+
    dt <- as.data.table(df)
    dt <- dt[, list(col = mean(col3)), by = col2]
    

    【讨论】:

    • Manoj。 list(col=mean(col3))- 右大括号
    • @akrun:已编辑。谢谢你:)
    【解决方案2】:

    或者只是旧的aggregate(假设temp是你的数据集)

    aggregate(V3 ~ V2, temp, mean)
    

    【讨论】:

      【解决方案3】:

      @csgillespie 中 tapply 的替代方法是 by 函数:

      by(dd$V3, dd$V2, mean)
      

      【讨论】:

        【解决方案4】:

        只需使用tapply。所以如果你有一个数据框dd,有三列V1V2V3,那么

        tapply(dd$V3, dd$V2, mean)
        

        会给你你想要的。

        【讨论】:

          猜你喜欢
          • 2020-10-07
          • 2023-03-06
          • 1970-01-01
          • 2013-10-09
          • 2020-07-16
          • 2013-05-30
          • 1970-01-01
          • 1970-01-01
          • 2017-12-06
          相关资源
          最近更新 更多