【问题标题】:group and average replicates from a data frame从数据框中分组和平均复制
【发布时间】:2014-07-04 19:35:58
【问题描述】:

我有一个包含不同样本和技术复制品(AA.1、AA.2、AA.3)的数据框。每个完整样本集(所有样本技术重复)都有一个测量值 var3,并针对不同的 var2(X、Y 或 Z)重复。所以总的来说,我有(样本数)(技术重复数)(var2 的数量)测量值(var1 x var2 的所有可能组合重复 3 次)。

data.frame(
  var1=rep(rep(c('AA.1', 'AA.2', 'AA.3', 'BB.1', 'BB.2', 'BB.3'), each=3), 2),
  var2=rep(c('X', 'Y'), each=18),
  var3=sample(20:40, 36, replace=TRUE)
)

对于每个 var2,我想平均每个样本的技术复制。我想通过创建一个新的数据框来做到这一点,该数据框将样本名称列为行名称,3 列是 3 个技术复制品。然后我可以做 rowMeans() 和 sd()。这怎么可能?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    在基础 R 中(调用您的数据框 df):

    aggregate(var3~var1+var2,df,mean)
    #    var1 var2     var3
    # 1  AA.1    X 31.66667
    # 2  AA.2    X 25.00000
    # 3  AA.3    X 30.66667
    # 4  BB.1    X 27.33333
    # 5  BB.2    X 32.00000
    # 6  BB.3    X 29.66667
    # 7  AA.1    Y 32.33333
    # 8  AA.2    Y 24.66667
    # 9  AA.3    Y 26.66667
    # 10 BB.1    Y 38.00000
    # 11 BB.2    Y 30.33333
    # 12 BB.3    Y 25.66667
    

    【讨论】:

      【解决方案2】:

      有几种方法可以做到这一点。我认为使用 dplyr 可能是最直接的,但您也可以使用 tapply 命令。我有点难以从你的问题中找出你想要分组的变量,但希望运行以下代码有助于让事情变得清晰 --

      假设您要查找 var3 的均值,按 var1 和 var2 分组,请输入以下内容:

      library(dplyr)
      
      dat %>% group_by(var2,var1) %>% 
      summarize(var3.mean = mean(var3))
      

      就像我说的那样,我很难判断这是否是您想要的分组结构。上面的代码将为您提供 var1 和 var2 的每个唯一组合的 var3 平均值。

      【讨论】:

      • 我收到一条错误消息,提示找不到函数 %>%。基本上,我想平均所有技术复制。每个唯一(var1)都与每个唯一(var2)匹配,并且我对每个组合都有技术复制。
      • 对不起——我忘了​​说如果你还没有安装 dplyr。在输入上面的代码之前,输入:install.packages("dplyr")。鉴于澄清,我相当确定上面的代码应该识别你正在寻找的手段。
      • 我已经安装了它,然后又重新安装了它,但我仍然收到错误。
      • 我发现了问题。函数应该是 '%.%' 而不是 '%>%'。谢谢!
      • 明白了。 %.% 是稍旧版本的包的语法——大约 2 个月前刚刚被替换。
      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 2015-10-09
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多