数据整理:基于另一列信息计算某列特定行的平均值
解决方案:按分组计算平均值并保留关联列信息
针对你的需求,我们可以通过分组聚合的方式实现,这里提供两种常用的R语言实现方案,分别适配不同的使用习惯:
方法一:使用dplyr包(推荐,语法更直观)
dplyr是tidyverse生态中处理数据的核心工具,分组聚合的逻辑清晰易懂:
# 若未安装dplyr,先执行install.packages("dplyr") library(dplyr) # 按c1和c2组合分组,计算c3的平均值 dfout <- dfin %>% group_by(c1, c2) %>% summarize(c3 = mean(c3), .groups = "drop") # 查看结果 print(dfout)
运行后会得到和你定义的dfout完全一致的结果:
c1 c2 c3
1 a1 b1 1.5
2 a1 b2 3.5
3 a1 b3 5.5
4 a2 b4 7.5
5 a2 b5 9.5
6 a2 b6 11.5
7 a3 b7 13.5
8 a3 b8 15.5
9 a3 b9 17.5
方法二:使用基础R的aggregate()函数
如果不想加载额外包,基础R自带的aggregate()函数也能完成任务:
# 按c1+c2的组合分组,对c3列应用平均值计算 dfout <- aggregate(c3 ~ c1 + c2, data = dfin, FUN = mean) # 查看结果 print(dfout)
这个方法的输出结果和上面完全相同,语法风格更贴近基础R的传统写法。
补充说明
从你的原始数据能看出,每个c2值都唯一对应一个c1值(比如b1仅属于a1),所以同时按c1和c2分组,既能保证聚合逻辑的正确性,又能完整保留我们需要的c1列信息。如果后续数据出现一个c2对应多个c1的情况,这个逻辑依然适用,会自动按c1+c2的组合维度计算平均值。
内容的提问来源于stack exchange,提问作者TomXXXX
相关产品推荐
相关产品推荐

