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

