【问题标题】:In R, what's the average number of distinct events per ID in a dataframe?在 R 中,数据帧中每个 ID 的不同事件的平均数量是多少?
【发布时间】:2021-11-22 20:25:06
【问题描述】:

背景

这是一个 R 数据框 d

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

看起来像这样:

您看到由ID 代表的 2 个人,每个人都有 >1 个事件。 ID=a 有 6 个事件,但只有 5 个不同的事件,而 ID=b 有 2 个事件,都是不同的。

问题

我想计算d 中每人不同/唯一events 的平均数量。在这种情况下,算法是这样的:

(5 个唯一事件 + 2 个唯一事件)/ 2 个不同的 ID's = 3.5 个每个人的唯一事件,这就是我正在寻找的答案。

我的尝试

到目前为止,我已经尝试过这样的事情:

d %>%
  group_by(ID) %>%
  summarise(mean = mean(tally(unique(event))))

但这会引发错误。

【问题讨论】:

  • 大声笑,我的数学错了!这里已经很晚了。将在原帖中更正。

标签: r dplyr count mean


【解决方案1】:

n_distinct 将为您提供不同事件的计数,您可以计算每个ID,然后计算比率。

library(dplyr)

d %>%
  group_by(ID) %>%
  summarise(distinct_event = n_distinct(event)) %>%
  summarise(ratio = mean(distinct_event))

#  ratio
#  <dbl>
#1   3.5

【讨论】:

    【解决方案2】:

    data.table

    library(data.table)
    library(magrittr)
    df <- data.frame(ID = c("a","a","a","a","a","a","b","b"),
                    event = c("G12","R2","O99","B4","B4","A24","L5","J15"),
                    stringsAsFactors=FALSE)
    
    setDT(df)[, list(uniqueN(event)), by = ID] %>% 
      .[, list(ratio = mean(V1))]
    #>    ratio
    #> 1:   3.5
    

    reprex package 创建于 2021-10-01 (v2.0.1)

    【讨论】:

      【解决方案3】:

      我们可以在base R 中做到这一点

      mean(aggregate(event ~ ID, d, FUN = function(x) length(unique(x)))$event)
      

      -输出

      [1] 3.5
      

      【讨论】:

        猜你喜欢
        • 2021-11-22
        • 1970-01-01
        • 2021-10-24
        • 2020-10-14
        • 2018-08-18
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 2020-04-07
        相关资源
        最近更新 更多