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

R纵向数据集跨波次变量重编码:首现1后后续波次均赋值1

解决方案

核心逻辑为按受访者唯一标识分组后,按调研波次的时间顺序排序,使用R内置的累积最大值函数即可实现需求,无需嵌套复杂的if-else判断。

代码实现

# 加载dplyr包
library(dplyr)

# 预设字段说明:
# id:受访者唯一识别码
# wave:调研波次,数值越大对应调研时间越晚
# furlough_raw:原始编码的0/1变量
df_processed <- df %>%
  group_by(id) %>%
  # 按波次升序排序,保证时间顺序正确
  arrange(wave, .by_group = TRUE) %>%
  # 生成重编码后的新变量
  mutate(furlough_corrected = cummax(furlough_raw)) %>%
  ungroup()

实现说明

cummax()为累积最大值计算函数,对于0/1构成的序列来说,只要序列中任意位置出现过1,后续所有位置的累积最大值都会固定为1,完全匹配你要求的「首次取值为1后所有后续波次统一设为1」的重编码规则。如果需要直接覆盖原始变量,将代码中的furlough_corrected替换为原始变量的名称即可。

异常兼容(可选)

如果原始变量存在缺失值,可先对缺失值做自定义处理后再计算,示例如下(默认缺失值按0处理):

mutate(furlough_corrected = cummax(coalesce(furlough_raw, 0)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:00