在R中按区域/年份分组,创建个体是否属众数类别的标识变量
为数据集添加众数类别标识列
你已经生成了各区域/年份对应众数性别的groups数据集,只需要将其与原数据集df1关联,再通过逻辑判断生成标识列即可。
先修正groups的代码
你提供的groups代码末尾多了一个冗余的闭合括号,正确代码如下:
# 创建众数计算函数 mode <- function(codes){which.max(tabulate(codes))} # 生成各区域/年份的众数表 groups <- df1 %>% group_by(Area, Year) %>% summarise(mode = mode(Gender))
方法1:使用dplyr工具链推荐
通过left_join关联两个数据集,再用mutate生成标识列:
library(dplyr) df1 <- df1 %>% # 按Area和Year关联groups left_join(groups, by = c("Area", "Year")) %>% # 判断Gender是否等于对应组的众数,是则标记1,否则0 mutate(is_mode = ifelse(Gender == mode, 1, 0))
方法2:使用base R实现
如果偏好base R语法,用merge关联后生成标识列:
# 关联df1和groups,保留df1所有行 df1_merged <- merge(df1, groups, by = c("Area", "Year"), all.x = TRUE) # 生成标识列,as.integer将逻辑值转为1/0 df1_merged$is_mode <- as.integer(df1_merged$Gender == df1_merged$mode) # 也可以直接在原df1上添加列 df1$is_mode <- as.integer(df1$Gender == merge(df1, groups, by = c("Area", "Year"), all.x = TRUE)$mode)
最终df1中的is_mode列会用1标记属于所在区域/年份众数类别的个体,0标记不符合的个体。
内容的提问来源于stack exchange,提问作者dbracken90
相关产品推荐
相关产品推荐

