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

如何基于年度季度工资数据生成二元变量Binary2?

生成Binary2变量的解决方案

要生成符合要求的Binary2变量,核心是按个人(MPI)+年份分组,判断该组内所有季度工资是否都≥100美元,再把判断结果统一赋值给组内每一行。下面是几种R语言实现方法:

方法1:使用dplyr包(tidyverse生态)

适合习惯tidy风格的用户,代码可读性强:

# 加载dplyr包
library(dplyr)

# 读取示例数据
dd <- read.table(text="
MPI     yrqtr  Wage Binary Binary2
PersonA 20101  100    1      1
PersonA 20102  100    1      1
PersonA 20103  100    1      1  
PersonA 20104  100    1      1
PersonA 20111  100    1      0
PersonA 20112  100    1      0
PersonA 20113  100    1      0
PersonA 20114   50    0      0", header=T)

# 生成Binary2
dd <- dd %>%
  # 从yrqtr字段提取年份(取前4位字符)
  mutate(year = substr(as.character(yrqtr), 1, 4)) %>%
  # 按个人和年份分组
  group_by(MPI, year) %>%
  # 组内所有工资都≥100则标记为1,否则为0
  mutate(Binary2 = as.integer(all(Wage >= 100))) %>%
  # 取消分组并移除临时year列(可选)
  ungroup() %>%
  select(-year)

方法2:使用data.table包(高效处理大数据)

如果数据集规模较大,data.table的运算效率更高:

# 加载data.table包
library(data.table)

# 将数据转换为data.table格式
setDT(dd)

# 提取年份并生成Binary2
dd[, year := substr(as.character(yrqtr), 1, 4)]
dd[, Binary2 := as.integer(all(Wage >= 100)), by = .(MPI, year)]
dd[, year := NULL] # 删除临时年份列

方法3:Base R(无需额外安装包)

不想安装第三方包的话,用Base R的ave函数也能实现:

# 读取示例数据
dd <- read.table(text="
MPI     yrqtr  Wage Binary Binary2
PersonA 20101  100    1      1
PersonA 20102  100    1      1
PersonA 20103  100    1      1  
PersonA 20104  100    1      1
PersonA 20111  100    1      0
PersonA 20112  100    1      0
PersonA 20113  100    1      0
PersonA 20114   50    0      0", header=T)

# 提取年份
dd$year <- substr(as.character(dd$yrqtr), 1, 4)

# 按个人和年份分组,判断所有工资是否达标,再转成1/0格式
dd$Binary2 <- as.integer(with(dd, ave(Wage >= 100, MPI, year, FUN = all)))

# 移除临时year列
dd$year <- NULL

内容的提问来源于stack exchange,提问作者Connor Hill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:30:49