在 R 中,每个 ID 重复列值的平均数量是多少?

In R, what's the average number of repeated column values per ID?

背景

我有这个 R 数据框,d:

d <- data.frame(ID = c("a","a","a","a","a","a","b","b"),
                event = c("G12","G12","G12","B4","B4","A24","L5","L5"),
                stringsAsFactors=FALSE)

看起来像这样:

如您所见,其中有 2 个不同的 ID,每个都有 events,其中一些重复 / 重复了任意次数。

问题

我想弄清楚此数据框中每个 ID 的平均重复 event 次数。

一目了然,您会看到 id= a2 个事件重复 -- G12,重复两次(总共 3 个条目)和 B4,重复一次(总共 2 个条目)。 id= b1 事件重复:L5。请注意,这里每个 repeat/duplicate 出现多少次与我无关;重要的是每个 ID.

至少有一个重复的 event

所以我想要的结果是一个简单的均值列表:

(2 重复的事件 + 1 重复的事件) / 2 人 = 1.5

我试过的

感谢像 这样的帖子,我已经有点接近了,但我还不够:

d %>% summarise(mean = mean(duplicated(event)))

这可以运行,但它没有考虑到重复发生在 ID 内(或者至少,我是这样看的)。

这是你想要的吗?

d %>%
  group_by(event , ID) %>%
  dplyr::summarise(n = n()) %>%
  filter(n > 1) %>%
  group_by(ID) %>%
  dplyr::summarise(n = n()) %>%
  summarise(result = mean(n))

  result
1    1.5

对于d

  ID event
1   Bill     1
2   Bill     1
3   Bill     2
4   Bill     2
5   Bill     3
6   Bill     3
7   Bill     4
8   Bill     4
9  Sarah     1
10 Sarah     1
11 Sarah     2
12 Sarah     2
13 Sarah     3
14 Sarah     3
15 Sarah     4
16 Sarah     4
17 Sarah     5
18 Sarah     5
19  Jane     1
20  Jane     1

    result
1 3.333333

对代码进行少量检查

d %>%
  group_by(event , ID) %>%
  dplyr::summarise(n = n()) %>%
  filter(n > 1) %>%
  group_by(ID) %>%
  dplyr::summarise(n = n())

  ID        n
  <chr> <int>
1 Bill      4
2 Jane      1
3 Sarah     5

对于每个 ID,您可以计算出现多次的 event,然后计算比率。

library(dplyr)

d %>%
  group_by(ID) %>%
  summarise(dup = sum(table(event) > 1)) %>%
  summarise(ratio = mean(dup))

#  ratio
#  <dbl>
#1   1.5

我们可以在 base R

中轻松做到这一点
mean(rowSums(table(d) > 1))
[1] 1.5

或与dplyr

library(dplyr)
d %>%
   count(event, ID) %>%
   summarise(ratio = mean(rowsum(+(n> 1), ID)))
  ratio
1   1.5