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

In R, how do I compute mean and standard error of a subset of data, grouped by multiple columns, and output this into a new data frame?

我有一个数据集(名为 'gala'),其中包含 "Day"、"Tree"、"Trt" 和 "LogColumn" 列。数据是随时间收集的,因此每棵编号的树都是同一棵树,因为每次处理在所有日子里都是相同的。每次治疗重复树编号(例如,多次治疗有树“1”)。

我想计算 'LogColumn' 列的均值和标准误差,对于每天每次处理的每棵树(例如,我将有第 1 天的均值 + 标准误差,第 1 棵树,处理 x 等),并将均值和标准误差结果输出到一个新的数据框中,该数据框还包括原始日期、树、Trt 值。

我一直在尝试从其他 Stack Overflow 答案中创建一个 Frankenstein 代码,但没有成功,但我似乎无法找到一个同时包含所有组件的代码。如果我错过了这个,我很抱歉,请通过 link 告诉我这个答案。我是编码和 R 的新手,不太了解如何应用与我想做的事情没有直接关系的其他代码。

此时,我有了这个,但不知道它是否接近正确(我目前也收到错误消息 "object of type 'closure' is not subsettable"): TreeAverages <- data.table[, MeanLog=mean(gala$LogColumn), se=std.error(gala$LogColumn), by=c("Day","Tree","Trt")]

非常感谢任何帮助。谢谢!

如果您正在使用 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.tabledplyr 一样工作,所以它已经知道变量名。您不需要始终指定 gala$LogColumn,只需按名称指定即可。

.() 只是 list() 的 shorthand,所以我指定 data.table 应该 return 列 MeanLogstdDayTreeTrt 分组。

使用 dplyr

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

使用基数 R aggregate:

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