根据其他条件创建新列

Larry Li

对于编码和R来说还是很新的,我正在处理数据框中的一些医疗数据。有3个结果,我很感兴趣- Mobilised_D1Diet_D1Catheter_rm_D1我希望创建一个第四列AnyTwo,其中如果3个结果中的任何2个Y或全部3个结果都是YT则为AnyTwo

我设法通过[]以下方式做到这一点

ERAS_limited[ERAS_limited$Mobilised_D1 == "Y" & ERAS_limited$Catheter_rm_D1 == "Y", "AnyTwo"] <- T
ERAS_limited[ERAS_limited$Diet_D1 == "Y" & ERAS_limited$Catheter_rm_D1 == "Y", "AnyTwo"] <- T
ERAS_limited[ERAS_limited$Diet_D1 == "Y" & ERAS_limited$Catheter_rm_D1 == "Y" & ERAS_limited$Mobilised_D1 == "Y", "AnyTwo"] <- T

dput(head(ERAS_limited))
structure(list(Mobilised_D1 = structure(c(2L, 2L, 1L, 1L, 1L, 
2L), .Label = c("N", "Y"), class = "factor"), Diet_D1 = structure(c(2L, 
2L, 2L, 2L, 1L, 2L), .Label = c("N", "Y"), class = "factor"), 
    Catheter_rm_D1 = structure(c(2L, 2L, 1L, 1L, 1L, 2L), .Label = c("N", 
    "Y"), class = "factor"), AnyTwo = c(TRUE, TRUE, FALSE, FALSE, 
    FALSE, TRUE)), row.names = c(NA, 6L), class = "data.frame")```

但是,我很想看看是否有更优雅的方法来做到这一点,例如为自己的学习和好奇心编写一个循环。

阿克伦

我们可以rowSums用来创建逻辑向量

library(dplyr)
ERAS_limited %>% 
    mutate(AnyTwo = rowSums(.[-4] == "Y")  >= 2)

在中base R,它将是

ERAS_limited$AnyTwo <- rowSums(ERAS_limited[-4]) == "Y") >= 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章