如何在R语言中基于5列Yes/No值创建二元分类新变量?
解决方法
你现在的代码问题在于用sum()会计算整个数据框里满足条件的总行数,而不是给每行生成对应的新变量值,所以得到的pyes和pno是单一数值,没法作为每行的变量。
要实现你要的逻辑,有两种简单的R语言写法:
方法一:直接用逻辑判断+ifelse
先给每行生成一个逻辑值(判断该行是否有任意一列是"Yes"),再用ifelse转换为"Yes"/"No":
# 注意检查列名:你代码里出现了pocket_biopsy和pbiopsy,确认是不是同一个列;另外重复的pxray判断可以删掉 has_yes <- data$pocket_biopsy == "Yes" | data$pxray == "Yes" | data$pchemo == "Yes" | data$pconsult == "Yes" # 生成新变量 data$new_var <- ifelse(has_yes, "Yes", "No")
方法二:用rowSums统计每行"Yes"数量
如果你的数据里有缺失值(NA),这种方法更稳妥,用rowSums统计每行的"Yes"数量,再判断是否大于0:
# 把目标列的"Yes"判断整合成矩阵,统计每行的"Yes"个数 yes_count <- rowSums(cbind( data$pocket_biopsy == "Yes", data$pxray == "Yes", data$pchemo == "Yes", data$pconsult == "Yes" ), na.rm = TRUE) # 数量>0就赋值"Yes",否则"No" data$new_var <- ifelse(yes_count > 0, "Yes", "No")
额外提醒
- 你代码里重复写了两次
data$pxray == "Yes",属于冗余代码,删掉不影响结果 - 注意确认列名:
pocket_biopsy和pbiopsy是不是同一个列的笔误,避免因为列名错误导致结果不对
内容的提问来源于stack exchange,提问作者ph_researcher
相关产品推荐
相关产品推荐

