在 R 数据框中取不同治疗和重复次数的平均值
Taking the mean of different treatment and rep counts in an R dataframe
下面是一个示例数据框,其中包含不同的样本、处理和代表,特别是在控制和处理之间记录生物量随时间的积累。我可以通过对其进行子集化或按处理组创建每个样本的(长)列表对象来计算每个样本、处理和代表的平均生物量,然后通过调用 lapply 以这种方式获取平均生物量。但是,是否有更简单或更好的方法来执行此操作而无需 "leave the dataframe",因此需要编写更少的代码?
set.seed(34)
df <- data.frame(
SAMPLE = rep(c("S0","S1","S2"), times = c(4,15,15)),
TREATMENT = c("Ctl","T1","T2","T3","Ctl","Ctl","Ctl",
"T1","T1","T1","T1","T2","T2","T2","T2",
"T3","T3","T3","T3","Ctl","Ctl","Ctl","T1",
"T1","T1","T1","T2","T2","T2","T2","T3",
"T3","T3","T3"),
REPS = c(1,1,1,1, 1,2,3,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,
1,2,3,4,1,2,3,4,1,2,3,4),
BIOMASS = round(rnorm(34, mean = 22, sd = 5), digits = 2)
)
head(df)
谢谢,
富兰克林
我们可以使用 base R
中的 aggregate
aggregate(BIOMASS~SAMPLE + TREATMENT, df, mean)
或者如果 'REPS' 和 'TREATMENT' 作为组
aggregate(BIOMASS~REPS + TREATMENT, df, mean)
或 data.table
library(data.table)
setDT(df)[, .(MEAN = mean(BIOMASS)) , .(SAMPLE, TREATMENT)]
感谢 Psidom 和 akrun。我现在更好地理解聚合......要使用 tidyverse 库做到这一点,它将是:
z <- dplyr::group_by(df, 样本, 处理)
总结(z,均值(生物量))
下面是一个示例数据框,其中包含不同的样本、处理和代表,特别是在控制和处理之间记录生物量随时间的积累。我可以通过对其进行子集化或按处理组创建每个样本的(长)列表对象来计算每个样本、处理和代表的平均生物量,然后通过调用 lapply 以这种方式获取平均生物量。但是,是否有更简单或更好的方法来执行此操作而无需 "leave the dataframe",因此需要编写更少的代码?
set.seed(34)
df <- data.frame(
SAMPLE = rep(c("S0","S1","S2"), times = c(4,15,15)),
TREATMENT = c("Ctl","T1","T2","T3","Ctl","Ctl","Ctl",
"T1","T1","T1","T1","T2","T2","T2","T2",
"T3","T3","T3","T3","Ctl","Ctl","Ctl","T1",
"T1","T1","T1","T2","T2","T2","T2","T3",
"T3","T3","T3"),
REPS = c(1,1,1,1, 1,2,3,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,
1,2,3,4,1,2,3,4,1,2,3,4),
BIOMASS = round(rnorm(34, mean = 22, sd = 5), digits = 2)
)
head(df)
谢谢, 富兰克林
我们可以使用 base R
aggregate
aggregate(BIOMASS~SAMPLE + TREATMENT, df, mean)
或者如果 'REPS' 和 'TREATMENT' 作为组
aggregate(BIOMASS~REPS + TREATMENT, df, mean)
或 data.table
library(data.table)
setDT(df)[, .(MEAN = mean(BIOMASS)) , .(SAMPLE, TREATMENT)]
感谢 Psidom 和 akrun。我现在更好地理解聚合......要使用 tidyverse 库做到这一点,它将是: z <- dplyr::group_by(df, 样本, 处理) 总结(z,均值(生物量))