首页 > 解决方案 > 根据其他人的情况创建新列

问题描述

对于编码和 R 来说仍然很新,我正在处理数据框中的一些医疗保健数据。我对 3 个结果感兴趣-Mobilised_D1和。我希望创建一个名为的第四列,如果 3 个结果中的任何 2 个是或所有三个结果都是,那么它将是for 。Diet_D1Catheter_rm_D1AnyTwoYYTAnyTwo

我已经设法通过使用[]如下方式做到这一点:

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")```

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

标签: r

解决方案


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

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

base R中,它将是

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

推荐阅读