如何在R中使用apply函数计算子组变量最大值并解决相关报错
错误原因
apply()函数传入数据框时会先强制转换为同类型矩阵,你设置了MARGIN=2代表按列遍历,传入自定义函数的参数x是单列原子向量,不支持$操作符提取字段,直接触发报错。- 用法逻辑不符合需求:你要提取子组内薪资最高的整行,不需要按列遍历,提前拆分单性别子组的操作也可以和分组计算合并,减少冗余代码。
修正实现
方案1:仅计算女性子组最高薪资行
不需要调用apply,直接筛选即可:
femaleFiltered[which.max(femaleFiltered$salary), ]
输出结果为Jenny对应的行,薪资80000,符合女性最高薪资的计算结果。
方案2:用apply函数族实现按性别子组批量计算最大值
如果需要对所有性别子组统一计算最高薪资行,使用split()拆分分组+lapply(属于apply函数族)遍历子组的方案,完全符合需求:
# 按gender列拆分数据集为子组列表,遍历每个子组取最高薪资行 max_sal_by_gender <- lapply(split(salary, salary$gender), function(sub_group) { sub_group[which.max(sub_group$salary), ] }) # 可选:将列表结果合并为数据框 max_sal_df <- do.call(rbind, max_sal_by_gender)
运行后可以同时得到男性、女性两个子组各自的最高薪资行。
内容的提问来源于stack exchange,提问作者Rohit Goswami
相关产品推荐
相关产品推荐

