我有一个数据集,每个参与者都有多个观察值(列名= id)。在每个观察结果中,为每个参与者进行诊断(列名=诊断)。
我想计算出具有特定诊断组合的参与者人数。
请在下面找到R代码的可复制示例。我试图按ID对数据进行分组,按两次诊断的组合进行过滤,然后计算参与者的数量,但这未返回任何数据。
您看到任何解决方案了吗?
谢谢!
library(tidyverse)
id <- c(1,1,1,2,2,2,3,3,3)
diagnosis <- c("a101", "b101", "a101",
"c101", "c101", "c101",
"b101", "a101", "b101")
data <- data.frame(id, diagnosis, stringsAsFactors = FALSE)
n_a101_and_b101 <- data %>%
group_by(id) %>%
filter((substr(diagnosis,1,4)=="a101") &
(substr(diagnosis,1,4)=="b101")) %>%
tally()
n_a101_and_b101
我怀疑有一个更好的tidyverse风格的管道答案,但是我可以通过set操作来做到这一点:
获取诊断_1的集合和诊断_2的集合,然后找到相交点,即两个集合中都存在的行。
a <- filter(data, diagnosis == "a101")
b <- filter(data, diagnosis == "b101")
intersect(a$id, b$id)
[1] 1 3
length(intersect(a$id, b$id))
[1] 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句