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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:36:03