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

将多列stress变量转换为以唯一值命名的二进制列(R语言)

解决方案

完整实现代码

df <- data.frame(
  stress1 = c('A', 'A', 'B', 'A'),
  stress2 = c(NA, 'B', 'C', 'B'),
  stress3 = c(NA, NA, NA, 'C'),
  stress4 = c(NA, NA, NA, 'D')
)

# 仅筛选列名以"stress"开头的变量
stress_cols <- df[, grepl("^stress", names(df))]

# 提取所有非NA的唯一值
unique_vals <- na.omit(unique(unlist(stress_cols)))

# 生成二进制编码的目标数据框
desiredoutcome <- data.frame(
  lapply(unique_vals, function(val) {
    # 检查每行是否包含当前值,存在则记1,否则0
    as.integer(rowSums(stress_cols == val, na.rm = TRUE) > 0)
  })
)

# 将新列名设置为对应的唯一值
names(desiredoutcome) <- unique_vals

代码说明

  • grepl("^stress", names(df)):精准匹配列名以stress开头的变量,确保不会修改数据集中的其他列。
  • rowSums(stress_cols == val, na.rm = TRUE):计算每行中等于目标值的单元格数量,na.rm = TRUE忽略NA值的干扰;通过>0判断该行是否存在目标值,再用as.integer把逻辑结果转换为1/0。
  • 最终生成的desiredoutcome结构与需求完全一致,运行后输出:
A B C D
1 1 0 0 0
2 1 1 0 0
3 0 1 1 0
4 1 1 1 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:36