如何在R中高效计算跨国时间序列的年度性别农业就业占比差值
高效计算分性别农业就业占比差值的R实现
方法一:用tidyverse处理(直观易读,推荐)
这种方法通过转换数据格式批量匹配同一年份的男女数据,适合后续还要做其他分析的场景:
library(tidyverse) # 假设你的数据框名为df df_processed <- df %>% # 把宽格式的年份列转成长格式,拆分出年份和性别 pivot_longer(cols = starts_with("X"), names_to = c("year", "gender"), names_pattern = "X(\\d+)_(.)", # 正则提取年份数字和性别标识 values_to = "agri_ratio") %>% # 将性别列拆成男性、女性两列,方便计算差值 pivot_wider(names_from = gender, values_from = agri_ratio) %>% # 计算女性占比减男性占比的差值 mutate(gender_diff = f - m) %>% # 转回宽格式(和原数据结构保持一致,可选) pivot_wider(names_from = year, values_from = c(f, m, gender_diff), names_glue = "X{year}_{.value}") # 把新生成的差值列合并回原数据(可选) df_final <- bind_cols(df, df_processed %>% select(starts_with("X") & ends_with("gender_diff")))
方法二:用base R处理(无需额外安装包)
如果不想加载第三方包,直接用基础R就能批量计算:
# 提取所有女性、男性对应的年份列 female_cols <- grep("_f$", colnames(df), value = TRUE) male_cols <- grep("_m$", colnames(df), value = TRUE) # 按年份排序,确保男女列一一对应 female_cols <- sort(female_cols) male_cols <- sort(male_cols) # 生成差值列的名称,比如X1991_f改成X1991_diff diff_col_names <- gsub("_f$", "_diff", female_cols) # 批量计算差值并添加到原数据框 df[diff_col_names] <- df[female_cols] - df[male_cols]
小提示
- 如果数据里有缺失值,计算后会得到NA,你可以根据需求用
ifelse处理,比如在tidyverse的mutate里写:gender_diff = ifelse(is.na(f)|is.na(m), NA, f - m)。 - 长格式数据(转换后的中间状态)更适合做分组统计或可视化,不需要转回宽格式的话可以跳过最后一步
pivot_wider。
内容的提问来源于stack exchange,提问作者anrisakaki96
相关产品推荐
相关产品推荐

