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
相关产品推荐
相关产品推荐

