R新手如何根据三个二分类疾病列生成任意患病标识新列
R 实现新增「任意患病D」列的解决方案
方法1:基础R实现(无需安装额外包)
写法1(适合变量少的场景,逻辑直观)
假设你的数据集命名为df,直接执行以下代码:df$任意患病D <- as.integer(df$A == 1 | df$B == 1 | df$C == 1)
逻辑说明:|是R的逻辑或运算符,只要三个条件有一个成立就返回TRUE,as.integer()会自动将TRUE转为1、FALSE转为0,完全匹配需求。写法2(适合变量多的场景,无需逐个写列名)
df$任意患病D <- as.integer(rowSums(df[,c("A","B","C")]) > 0)
逻辑说明:先对每一行的A、B、C三列求和,求和结果大于0就说明至少有一个列取值为1,再转成整数即可得到目标值。
方法2:dplyr 包实现(适合tidyverse生态用户)
先加载dplyr包:library(dplyr)
执行以下代码即可:
df <- df %>% mutate(任意患病D = as.integer(if_any(c(A,B,C), ~ .x == 1)))
逻辑说明:if_any()是dplyr专门用来判断多列是否任意满足条件的函数,指定列只要有一个满足条件就返回TRUE,转整数后就是需要的0/1值。
补充说明:如果A/B/C列存在缺失值NA,可以在计算时添加
na.rm = TRUE参数过滤缺失值,比如rowSums的写法改为rowSums(df[,c("A","B","C")], na.rm = TRUE) > 0即可。
内容的提问来源于stack exchange,提问作者Kazi_Minhaz
相关产品推荐
相关产品推荐

