如何使用dplyr的replace与group_by函数为mtcars数据集的cyl变量创建多分组
解决mtcars数据集的分组替换需求
没问题,我来帮你搞定这个分组任务,同时修正你代码里的一个小细节,保证结果符合预期!
首先,你原来的代码里有个容易忽略的问题:summarise(meanHP =(hp)) 并不会计算马力的均值,而是会把整个hp列直接保留下来,所以需要改成mean(hp, na.rm = TRUE)来计算每组的平均马力(加上na.rm=TRUE是为了处理可能存在的缺失值,是数据分析里的好习惯)。
回到你的核心需求:用replace命令把cyl中值为8的条目替换为Group2,同时保留之前4、6替换为Group1的逻辑,这里可以通过嵌套使用replace函数来实现,具体代码如下:
library(datasets) library(dplyr) mtcars %>% # 先完成4、6到Group1的替换,再处理8到Group2的替换 group_by(cyl = replace(replace(cyl, cyl %in% c(4,6), "Group1"), cyl == 8, "Group2")) %>% summarise(meanHP = mean(hp, na.rm = TRUE))
代码逻辑说明:
- 第一层
replace(cyl, cyl %in% c(4,6), "Group1"):先完成你原本的需求,把cyl中数值为4和6的条目替换为字符串Group1 - 第二层嵌套的
replace(..., cyl == 8, "Group2"):在第一次替换后的结果基础上,把剩下的cyl值为8的条目替换为Group2(因为第一次替换后,只有8还保持原来的数值,这个条件可以精准匹配目标条目)
运行这段代码后,你会得到Group1(对应原cyl的4、6)和Group2(对应原cyl的8)两个分组的平均马力结果,完全符合你的要求。
内容的提问来源于stack exchange,提问作者Lelleo
相关产品推荐
相关产品推荐

