在R中,我如何计算数据子集的均值和标准误差,按多个列分组,并将其输出到新数据框中?

3
我有一个数据集(名为'gala'),它有列"Day"、"Tree"、"Trt"和"LogColumn"。数据是随时间收集的,因此每个编号的树在所有天数内的每个治疗中都是相同的。每个治疗中的树号重复(例如,多个治疗中都有树“1”)。
我想计算每个树在每个治疗中每天的"LogColumn"列的平均值和标准误差(例如,我将得到第1天、第1棵树、治疗x等的平均值和标准误差),并将平均值和标准误差结果输出到一个新的数据框中,该数据框还包括原始的Day、Tree、Trt值。
我一直在试图从其他Stack Overflow答案的代码中组合代码,但似乎没有一个同时具备所有组件。如果我错过了,请告诉我答案的链接。我刚开始学编程和R,不太明白如何应用与我要做的事情不直接相关的其他代码。
目前,我有以下代码,但不知道是否正确(我当前也正在收到错误消息“类型为'closure'的对象无法进行子集操作”): TreeAverages <- data.table[, MeanLog=mean(gala$LogColumn), se=std.error(gala$LogColumn), by=c("Day","Tree","Trt")] 非常感谢您的帮助。谢谢!

3
请提供一个可重现的例子。 https://dev59.com/eG025IYBdhLWcg3whGSx - shiny
3个回答

7

使用基础R语言的aggregate函数:

aggregate(LogColumn ~ Day + Tree + Trt, data = gala, 
          FUN = function(x) c(mean = mean(x), se = std.error(x)))

2
很棒的解决方案。我认为std.error()不是一个基本函数。对于那些想要使用上述方法的人,只需执行以下操作:install.packages("plotrix")然后library(plotrix),上述内容应该可以正常工作! - Benjamin Simpson

6
如果您正在使用data.table,请记得首先将gala转换为一个data.table对象。
gala = data.table(gala)

gala_output = gala[, .("MeanLog" = mean(LogColumn), 
         "std" = std.error(LogColumn)), 
     by = c("Day", "Tree", "Trt")]

你已经非常接近了,但是 data.table 的工作方式类似于 dplyr,因此它已经知道变量名。你不需要在整个过程中指定 gala$LogColumn,只需按名称执行即可。 .() 只是 list() 的一种简写形式,因此我正在指定 data.table 应该按 DayTreeTrt 进行分组返回 MeanLogstd 列。

1
我收到了错误信息 找不到函数“std.error” - dpel
搞定了 - 它需要library(plotrix) - dpel

4

使用dplyr

library(dplyr)
df <- gala %>% 
  group_by(Day, Tree, Trt) %>% 
  summarise(mean = mean(LogColumn),
            std = sd(LogColumn))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接