group_by и количество элементов в каждом столбце в R - PullRequest
0 голосов
/ 01 марта 2019

У меня есть таблица данных, как показано ниже:

city         year    t_20   t_25 
Seattle      2019    82      91  
Seattle      2018     0      103   
NYC          2010    78       8 
DC           2011    71       0  
DC           2011     0       0    
DC           2018    60       0

Я бы хотел сгруппировать их по city и year и посчитать количество нулей в каждой группе.

Как я могу это сделать?summarize_at?

df %>% group_by(city, year) %>% summarise_at( WHAT GOES HERE , vars(t_20:t_25))

Каким должен быть первый аргумент summarize_at?

или любым другим способом?tally

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Простая группировка по операции хорошо подходит для формулировки с использованием SQL.Для тех, кто склонен к SQL, мы также можем попытаться решить эту проблему, используя библиотеку sqldf:

library(sqldf)

sql <- "SELECT city, COUNT(CASE WHEN t_20 = 0 THEN 1 END) AS t_20_cnt,
            COUNT(CASE WHEN t_25 = 0 THEN 1 END) AS t_25_cnt
        FROM df
        GROUP BY city"

output <- sqldf(sql)
0 голосов
/ 01 марта 2019

Можно изменить форму с широкого на длинный, прежде чем summarise ing

library(tidyverse)
df %>%
    gather(k, v, -city, -year) %>%
    group_by(city, year) %>%
    summarise(n_0 = sum(v == 0)) 
#    # A tibble: 5 x 3
## Groups:   city [?]
#  city     year   n_0
#  <fct>   <int> <int>
#1 DC       2011     3
#2 DC       2018     1
#3 NYC      2010     0
#4 Seattle  2018     1
#5 Seattle  2019     0

Для суммирования для каждого отдельного столбца вы можете сделать

df %>%
    group_by(city, year) %>%
    summarise_all(funs(sum(. == 0)))
## A tibble: 5 x 4
## Groups:   city [?]
#  city     year  t_20  t_25
#  <fct>   <int> <int> <int>
#1 DC       2011     1     2
#2 DC       2018     0     1
#3 NYC      2010     0     0
#4 Seattle  2018     1     0
#5 Seattle  2019     0     0

Пример данных

df <- read.table(text =
    "city         year    t_20   t_25
Seattle      2019    82      91
Seattle      2018     0      103
NYC          2010    78       8
DC           2011    71       0
DC           2011     0       0
DC           2018    60       0", header = T)
...