在 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.table
像 dplyr
一样工作,所以它已经知道变量名。您不需要始终指定 gala$LogColumn
,只需按名称指定即可。
.()
只是 list()
的 shorthand,所以我指定 data.table 应该 return 列 MeanLog
和std
按 Day
、Tree
和 Trt
分组。
使用 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)))
我有一个数据集(名为 '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.table
像 dplyr
一样工作,所以它已经知道变量名。您不需要始终指定 gala$LogColumn
,只需按名称指定即可。
.()
只是 list()
的 shorthand,所以我指定 data.table 应该 return 列 MeanLog
和std
按 Day
、Tree
和 Trt
分组。
使用 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)))