根据所有可能的组计算仅出现在单个组中的唯一字符串

Count unique strings that only occur in a single group based on all possible groups

我有以下df

a = data.frame(PA = c("A", "A", "A", "B", "B"), Family = c("aa", "ab", "ac", "aa", "ad"))

我想要获得的是基于所有可能的 PA 的每个 PA(A 或 B)中唯一 'Family' 字符串(aa、ab、ac、ad)的计数。例如,aa 是 A 和 B 的唯一字符串,但由于它出现在两个 PA 中,所以我不想要它。另一方面,ab 和 ac 对于 PA A 是唯一的,并且只出现在 PA A 中:这就是我想要的。

使用 dplyr 我正在做类似的事情:

df >%> group_by(PA) %>%
summarise(count_family = n_distinct(Family))

但这只是每个 PA 中的 returns 个唯一术语 — 我希望在基于所有可能的 PA 的唯一 PA 中出现独特的家族

这是一个 tidyverse 方法。

首先删除所有重复的 Family,然后 group_by(PA) 并计数。

library(tidyverse)

a %>% group_by(Family) %>% 
  filter(n() == 1) %>% 
  group_by(PA) %>%  
  summarize(count_family = n())

输出

# A tibble: 2 x 2
  PA    count_family
  <chr>        <int>
1 A                2
2 B                1

summarise()

之前的输出
# A tibble: 3 x 2
# Groups:   Family [3]
  PA    Family
  <chr> <chr> 
1 A     ab    
2 A     ac    
3 B     ad