对于编码和R来说还是很新的,我正在处理数据框中的一些医疗数据。有3个结果,我很感兴趣- Mobilised_D1
,Diet_D1
和Catheter_rm_D1
。我希望创建一个第四列AnyTwo
,其中如果3个结果中的任何2个Y
或全部3个结果都是Y
,T
则为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] 删除。
我来说两句