r - 根据其他人的情况创建新列
问题描述
对于编码和 R 来说仍然很新,我正在处理数据框中的一些医疗保健数据。我对 3 个结果感兴趣-Mobilised_D1
和。我希望创建一个名为的第四列,如果 3 个结果中的任何 2 个是或所有三个结果都是,那么它将是for 。Diet_D1
Catheter_rm_D1
AnyTwo
Y
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
推荐阅读
- mariadb - 为什么mariadb中这两个select值的结果不一样?
- microsoft-teams - 用户登录团队时如何直接从 Microsoft Teams 获取令牌
- python - 如何识别公共假期
- python - Google Speech Recognition API 输出错误,不确定为什么会发生
- laravel-5.8 - 如何在laravel登录刀片中加密用户名和密码
- reactjs - 加载一个svg文件而不修改webpack中的react
- flutter - 如何使用多提供商更改主题?
- excel - 如何正确转置?
- firebase - 如何通过 UID 从 Firebase 访问用户?
- azure - 使用数组中的元素加入流分析