计算R中每组表格的频率

时间:2019-04-29 21:45:14

标签: r count frequency

我有一个数据表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

2 个答案:

答案 0 :(得分:2)

可能的tidyverse解决方案:

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

答案 1 :(得分: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