R 如何计算具有多个观察值/行的参与者的数量,这些观察值/行在列的不同行中具有值的组合?

R 如何计算具有多个观察值/行的参与者的数量,这些观察值/行在列的不同行中具有值的组合?,r,filter,group-by,dplyr,R,Filter,Group By,Dplyr,我有一个数据集,每个参与者都有多个观察结果(列名=id)。在每次观察中,每个参与者都会得到一个诊断(列名=诊断) 我想统计一下有特定诊断组合的参与者人数 请在下面找到R代码的可复制示例。我曾尝试按id对数据进行分组,按两种诊断的组合进行筛选,然后统计参与者的数量,但这不会返回任何数据 你有什么解决办法吗 谢谢大家! library(tidyverse) id <- c(1,1,1,2,2,2,3,3,3) diagnosis <- c("a101", "b101", "a101",

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

id我怀疑有一个更好的tidyverse风格的管道答案,但我会通过设置操作来实现这一点:

获取诊断集_1和 获取诊断集_2,然后 找到十字路口, i、 e.两组中出现的行

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

a我怀疑有一个更好的tidyverse风格的管道答案,但我会通过设置操作来实现这一点:

获取诊断集_1和 获取诊断集_2,然后 找到十字路口, i、 e.两组中出现的行

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
a
库(tidyverse)
id 0)%%>%
不同的(id)%>%
nrow()
# [1] 2
您还可以使用
过滤器(“a101”%在%diagnosis中,%diagnosis中的“b101”%在%diagnosis中)
作为替代方法。

库(tidyverse)
id 0)%%>%
不同的(id)%>%
nrow()
# [1] 2

您还可以使用
过滤器(“a101”%在%diagnosis中,以及“b101”%在%diagnosis中)
作为替代方法。

可能有几种方法可以实现这一点。我刚刚修改了你的代码:

ab101 <- data %>% 
  group_by(id) %>% 
  mutate(yes = (max(diagnosis == "a101") + 
                  max(diagnosis == "b101"))==2) %>% 
  summarise(yes = yes[1])
sum(ab101$yes)
ab101%
分组依据(id)%>%
突变(是=(最大值(诊断=“a101”)+
最大值(诊断==“b101”)==2)%>%
总结(是=是[1])
金额(ab101$yes)

[1] 2

实现这一点可能有几种方法。我刚刚修改了你的代码:

ab101 <- data %>% 
  group_by(id) %>% 
  mutate(yes = (max(diagnosis == "a101") + 
                  max(diagnosis == "b101"))==2) %>% 
  summarise(yes = yes[1])
sum(ab101$yes)
ab101%
分组依据(id)%>%
突变(是=(最大值(诊断=“a101”)+
最大值(诊断==“b101”)==2)%>%
总结(是=是[1])
金额(ab101$yes)

[1] 2

需要将
&
设置为
|
<代码>(substr(诊断,1,4)=“a101”)|(substr(诊断,1,4)=“b101”)
。诊断不能同时进行
a101
b101
。您不需要使用
substr
,因为您正试图找出精确的匹配项。
必须是
<代码>(substr(诊断,1,4)=“a101”)|(substr(诊断,1,4)=“b101”)
。诊断不能同时进行
a101
b101
。您不需要使用
substr
,因为您正在尝试发现精确匹配。