r - 如何在R中使用逻辑向量
问题描述
3名医生诊断一名患者
问题1:如何筛选所有3位医生诊断为疾病B的患者(无论是B.1、B.2还是B.3)
问题2:如何筛选3位医生中任何一位诊断为疾病A的患者。
set.seed(20200107)
df <- data.frame(id = rep(1:5,each =3),
disease = sample(c('A','B'), 15, replace = T))
df$disease <- as.character(df$disease)
df[1,2] <- 'A'
df[4,2] <- 'B.1'
df[5,2] <- 'B.2'
df[6,2] <- 'B.3'·
df
我有一个方法,但我不知道如何编写代码。我认为应该在代码any()
或all()
函数中使用。
首先,我想按 id 对患者进行分组。
其次,检查每组中的所有疾病是A还是B。
像这样的代码
df %>% group_by(id) %>% filter_all(all_vars(disease == B))
解决方案
您可以all
假设每位患者仅由 3 位医生检查。
library(dplyr)
df %>% group_by(id) %>% summarise(disease_B = all(grepl('B', disease)))
# id disease_B
# <int> <lgl>
#1 1 FALSE
#2 2 TRUE
#3 3 FALSE
#4 4 FALSE
#5 5 FALSE
如果要对患者的行进行子集化,我们可以使用filter
df %>% group_by(id) %>% filter(all(grepl('B', disease)))
对于问题 2:类似地,我们可以使用any
df %>% group_by(id) %>% summarise(disease_B = any(grepl('A', disease)))
数据
df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L), disease = c("A", "A", "A", "B.1", "B.2",
"B.3", "B", "A", "A", "B", "A", "A", "B", "A", "B")), row.names = c(NA,
-15L), class = "data.frame")
推荐阅读
- python - x509 证书验证 Python
- c# - SQLite 与 WPF 应用程序部署
- reactjs - 在反应中验证蚂蚁设计 InputNumber 的最大长度
- spring-boot - 在控制器中处理可为空的 UUID - SpringBoot 和 Postgres
- dynamics-crm - 在 CRM 设计中,是否必须在请求更改地址时强制更新电话号码?
- r - 在一张图像中合并几个并排的图,直到某个给定的上限
- ansible - 如何阻止ansible跳到第二个任务,直到第一个任务成功执行?
- postgresql - 如何在 PostgreSQL 中切换用户?我的意思是作为 PostgreSQL 中的另一个现有用户登录
- python - MultiIndexed pandas 数据框认为输入是唯一的
- amazon-web-services - Scala:获取 URL 参数