如何计算经重新编码分组后的各性别组age均值?
问题:重新分组后计算分组的age均值
已有数据示例:
age gender 20 0 27 0 23 1 ... ...
已执行的R代码:
library(plyr) gender <- revalue(as.factor(gender), c("0"="F", "1"="M")) table(gender )
执行结果:
gender F M 30 41
现需计算F、M两个性别组各自的age均值,该如何操作?
解答
这里提供几种实用的实现方式:
方法1:基于已加载的plyr包实现
因为你已经加载了plyr包,直接用ddply函数就能按分组计算均值,注意要确保gender和age在同一个数据框中(假设你的数据集名为df):
library(plyr) # 先将gender转换并添加到数据框中 df$gender <- revalue(as.factor(df$gender), c("0"="F", "1"="M")) # 按gender分组计算age均值 age_group_mean <- ddply(df, .(gender), summarise, mean_age = mean(age, na.rm = TRUE)) # 查看结果 print(age_group_mean)
提示:na.rm = TRUE用于忽略缺失值,避免计算出错,若数据无缺失可省略。
方法2:使用基础R函数tapply
无需额外加载包,用基础R的tapply即可快速实现:
# 转换gender分组 gender <- revalue(as.factor(df$gender), c("0"="F", "1"="M")) # 按分组计算均值 age_group_mean <- tapply(df$age, gender, mean, na.rm = TRUE) print(age_group_mean)
方法3:使用dplyr包(现代tidy风格)
如果偏好更简洁的tidy语法,可以使用dplyr包:
library(dplyr) df <- df %>% # 重新编码gender分组 mutate(gender = recode_factor(gender, "0" = "F", "1" = "M")) %>% # 按gender分组 group_by(gender) %>% # 计算均值 summarise(mean_age = mean(age, na.rm = TRUE)) print(df)
内容的提问来源于stack exchange,提问作者Talkthattalk
相关产品推荐
相关产品推荐

