首页 > 解决方案 > 如何计算具有多个观察/行的参与者的数量,这些观察/行在列的不同行中具有值组合?

问题描述

我有一个数据集,每个参与者都有多个观察结果(列名=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

标签: rfiltergroup-bydplyr

解决方案


library(tidyverse)

id <- c(1,1,1,2,2,2,3,3,3)
diagnosis <- c("a101", "b101", "a101",
               "a101", "c101", "c101",
               "b101", "a101", "b101")

data <- data.frame(id, diagnosis, stringsAsFactors = FALSE)

data %>%
  group_by(id) %>%
  filter(sum(diagnosis == "a101") * sum(diagnosis == "b101") > 0) %>%
  distinct(id) %>%
  nrow()

# [1] 2

您也可以filter("a101" %in% diagnosis & "b101" %in% diagnosis)用作替代方案。


推荐阅读