【问题标题】:count frequencies across a table per group in R计算 R 中每组表中的频率
【发布时间】:2019-04-30 06:20:05
【问题描述】:

我有一个数据表df,我想按第一列“位置”对其进行分组, 并计算所有表中条目的频率,包括列和行:

df

location   NN_1    NN_2   NN_3
    NYC    17      17      17
    NYC    17      16      1
    LA     1        1      10
    LA     16      10      1

可以通过以下方式获得:

df <- structure(list(location = c("NYC", "NYC", "LA", "LA"), 
                     NN_1 = c(17, 17, 1, 16), 
                     NN_2 = c(17, 16, 1, 10), 
                     NN_3 = c(17, 1, 10, 1)),
                     class = "data.frame", 
                     row.names = c(NA, -4L))

我想计算17 在给定位置重复了多少次,例如NYC:

output
location   NNs  freq
    NYC    17      4
    NYC    16      1
    NYC     1      1
    LA      1      3
    LA      16     1
    LA      10     2

【问题讨论】:

    标签: r count frequency


    【解决方案1】:

    可能的 tidyverse 解决方案:

    df %>% 
      gather("key", "NNs", 2:ncol(.)) %>% 
      group_by(location, NNs) %>% 
      summarize(freq = n()) %>% 
      arrange(desc(location), desc(NNs))
    

    【讨论】:

    • 谢谢。这行得通,但你知道为什么当有另一列时,比如说year,然后R 抱怨不知道location 列吗? Error in grouped_df_impl(data, unname(vars), drop) : Column location` 未知`
    • 你能发布代码吗?可能的问题在于收集的第三个参数。在其中选择变量。
    【解决方案2】:

    Base R 解决方案,有效地做与 tidyverse 解决方案相同的事情。将第一个 location 列标识符放在所有其他列上,然后制表:

    as.data.frame(table(cbind(df[1], NNs=unlist(df[-1]))))
    #  location NNs Freq
    #1       LA   1    3
    #2      NYC   1    1
    #3       LA  10    2
    #4      NYC  10    0
    #5       LA  16    1
    #6      NYC  16    1
    #7       LA  17    0
    #8      NYC  17    4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2017-05-12
      • 2020-11-23
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多