【问题标题】:R number of grouped observations equal to the mode (by group) over timeR 分组观察数等于模式(按组)随时间变化
【发布时间】:2020-12-19 00:50:42
【问题描述】:

我正在研究分组数据中的值 X 如何随时间 (t) 变化。对于大多数观察,X 从零开始,然后随着时间的推移随机变化。在每个时间点,我想找出每个组中有多少观察具有该组的 mode 值 - 理想情况下不包括零值。数据如下所示,但包含更多、更大的组和更多的 t 列。

     group_name t1 t10 t50 t100
1            s3  0 259 187  122
2            s1 29  25  23   15
3            s3  0 259  23  122
4            s2  0  36  24   15
5            s1 29  25  23   15
6            s2  0  32  24   15

最终,我想绘制出有多少观察值具有各自组的众数值作为 t 的函数,但我不知道如何使用高效的 R 代码处理数据。

我已经看到有几种方法可以计算每个组在单个时间点的模式(例如here),但我不知道如何调整这些方法来计算等于该模式的数字,或者这将是扩展多个 t 列的最有效方法。

感谢您的任何建议!

【问题讨论】:

    标签: r dplyr group-by count mode


    【解决方案1】:

    我们可以通过排除 0 值 (.[. != 0]) 对行子集应用 Mode 函数,按“group_name”和 summarise across 其余列 (everything()) 进行分组,用列的元素创建一个逻辑向量(==),得到sum,通过分组变量找到每一列的频率

    library(dplyr)
    df1 %>%
        group_by(group_name) %>%
        summarise(across(everything(), ~ sum(Mode(.[. !=0]) == ., na.rm = TRUE)))
    # A tibble: 3 x 5
    #  group_name    t1   t10   t50  t100
    #  <chr>      <int> <int> <int> <int>
    #1 s1             2     2     2     2
    #2 s2             0     1     2     2
    #3 s3             0     2     1     2
    

    或使用data.table

    library(data.table)
    setDT(df1)[, lapply(.SD, function(x) sum(Mode(x[x != 0]) == x, na.rm = TRUE)),
                 by = group_name]
    

    在哪里

    Mode <- function(x) {
      ux <- unique(x)
      ux[which.max(tabulate(match(x, ux)))]
    }
    

    如果我们需要跨 't' 列进行计算,请重塑为 'long' 格式(pivot_longer),filter 出 0 值,按 'group_name' 分组,summarise 频率为 'Mode ' 值

    library(tidyr)
    df1 %>% 
      pivot_longer(cols = starts_with('t')) %>%
      filter(value != 0) %>% 
      group_by(group_name) %>% 
      summarise(n_Mode = sum(Mode(value) == value))
    

    【讨论】:

    • 感谢您,对不同选项进行了非常全面的细分,通过第一种方法对我的完整数据进行了 dplyr 路线,它完全符合我的需要
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多