如何用dplyr在大分组内的子分组中进行汇总计算?
解决方案
你的问题出在分组维度上——你需要按**子分组(由plot的首位数字区分)+ 处理组trt**共同分组,而不是仅按trt分组。以下是修正后的代码:
library(dplyr) # 第一步:从plot中提取子分组标识(这里取百位数字作为子分组) ex <- ex %>% mutate(block = substr(as.character(plot), 1, 1)) # 第二步:按子分组和trt分组计算均值,最后去掉block列匹配期望结构 correct_result <- ex %>% group_by(block, trt) %>% summarise(rating = mean(value), .groups = "drop") %>% select(trt, rating)
运行后得到的结果与你提供的correct数据框完全一致:
trt rating 1 a 1.5 2 b 3.5 3 c 5.5 4 a 1.5 5 b 3.5 6 c 5.5 7 a 1.5 8 b 3.5 9 c 5.5
关键说明
- 原代码仅按
trt分组,会把所有同处理组的观测合并计算均值,因此只得到3行结果; - 新增的
block变量用来区分不同子分组(比如plot以1开头的为一组,2开头的为另一组),再结合trt分组后,每个子分组内的每个处理组都会单独计算均值,最终得到9行结果; - 如果你的子分组规则不是取
plot首位数字,只需调整mutate(block = ...)的逻辑即可,核心是先定义子分组变量,再按子分组+trt共同分组。
内容的提问来源于stack exchange,提问作者s_o_c_account
相关产品推荐
相关产品推荐

