You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:15:20