считать частоты по таблице на группу в R - PullRequest
1 голос
/ 30 апреля 2019

У меня есть таблица данных df, я хотел бы сгруппировать ее по первому столбцу, 'location', и вычислите частоту записей по всей таблице, как по столбцам, так и по строкам:

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 ]

2 голосов
/ 30 апреля 2019

Решение 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
2 голосов
/ 30 апреля 2019

Возможное решение проблемы:

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