R中如何批量重编码宽表:值等于列名则为1否则为0
R实现压力源数据宽表0/1批量编码方案
最优方案:dcast一步生成0/1宽表
你不需要先转成文本值的宽表再重编码,直接在dcast调用时指定聚合函数即可实现需求:
library(reshape2) # fun.aggregate = length 会自动统计每个id+stressor组合的出现次数,缺失组合自动补0 data_cast <- dcast(data, id ~ stressor, fun.aggregate = length)
运行后直接得到你需要的0/1格式宽表,无需额外处理。
备选方案:对已生成的宽表批量重编码
如果你已经生成了存储文本值和NA的宽表,不想重新运行转换步骤,可以用以下两种方法批量处理:
dplyr写法
library(dplyr) data_cast <- data_cast %>% # 对除id外的所有列,判断单元格值是否等于当前列名,转成数值(TRUE=1,FALSE=0) mutate(across(-id, ~as.numeric(. == cur_column())))
基础R写法
# 定位除id外的所有压力源列 stressor_cols <- setdiff(colnames(data_cast), "id") # 批量遍历重编码 data_cast[stressor_cols] <- lapply(stressor_cols, function(col) { as.numeric(data_cast[[col]] == col) })
以上所有方案均兼容61个stressor列的场景,不需要手动逐列指定编码规则。
内容的提问来源于stack exchange,提问作者eliseabril
相关产品推荐
相关产品推荐

