R语言如何对dataframe列表分组求均值后计算标准差
问题解决
报错原因
- 第一段错误代码:
df_list是存储多个dataframe的列表,不能直接用$运算符提取内部每个dataframe的列,df_list$Result属于无效调用 - 第二段错误代码:存在语法问题,括号匹配错误,内层
lapply返回的是每个元素为「分组均值结果表」的列表,外层lapply的函数写法不符合R语法规范
正确实现(基础R版本)
直接嵌套lapply处理即可,对列表中每个dataframe,先按Sample_No分组算Result的均值,再提取均值列计算标准差:
df_list_sd <- lapply(df_list, function(x) { # 先按Sample_No分组计算Result的均值 group_mean <- aggregate(Result ~ Sample_No, data = x, FUN = mean) # 对分组得到的均值计算标准差 sd(group_mean$Result) })
运行后你会得到一个和原列表元素名(Fe/SiO2/Al2O3)对应的标准差结果列表,如果你想转成向量可以直接用unlist(df_list_sd)。
补充提示:你之前写的单个dataframe处理代码会同时对Sample_No和均值列计算标准差,实际上只需要对均值列计算即可,可以优化为:
df_sd <- sd(aggregate(Result ~ Sample_No, data = df, FUN = mean)$Result)
Tidyverse版本实现(可选)
如果你习惯使用tidyverse生态的工具,也可以用dplyr+purrr实现:
library(purrr) library(dplyr) df_list_sd <- map(df_list, ~.x %>% group_by(Sample_No) %>% summarise(mean_res = mean(Result)) %>% pull(mean_res) %>% sd())
内容的提问来源于stack exchange,提问作者Spooked
相关产品推荐
相关产品推荐

