首页 > 解决方案 > 在 R 中,每个 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)

它看起来像这样:

d

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

问题

我想弄清楚这个数据框中的平均重复次数event是多少ID

乍一看,您会看到id= a2 个重复的事件 - G12,它重复两次(总共 3 个条目)和 B4,它重复一次(总共 2 个条目)。id= b1 个重复的事件:L5。请注意,每次重复/重复发生多少次与我无关;重要的是event每个ID.

所以我想要的结果是这个平均值的简单表格:

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

我试过的

多亏了这样的帖子,我已经有点接近了,但我并不完全在那里:

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

这会运行,但它并没有考虑到重复发生在内部ID(或者至少,我是这么认为的)。

标签: rdplyrduplicates

解决方案


这是你想要的吗?

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

推荐阅读