如何group_by date显示零和非零条目的计数?

时间:2019-12-17 03:04:31

标签: r dplyr

我有以下示例数据。 我试图将它们按不同的日期分组,我需要新的列来告诉我多少个零条目和多少个非零条目。

gantry_date gantry_duration
10/2/2018   126.809
10/2/2018   0
10/2/2018   38.505
10/2/2018   0
10/2/2018   63.888
10/2/2018   81.362
10/2/2018   45.055
10/1/2018   111.648
10/1/2018   0
10/1/2018   119.291
10/1/2018   0
10/1/2018   37.565
10/1/2018   33.794
10/1/2018   0
10/1/2018   0
10/1/2018   0

所需的输出是

         Zero   non-zero
10/1/2018   5   4
10/2/2019   2   5

我尝试了以下XXXX排列不同的代码。尝试汇总,计数,总和以及汇总与总和或计数的组合。

data <- gantry1 %>% group_by(gantry_date) %>% XXXXX

无法获得所需的输出。

1 个答案:

答案 0 :(得分:2)

您可以使用table

table(df$gantry_date, df$gantry_duration == 0)

#            FALSE TRUE
#  10/1/2018     4    5
#  10/2/2018     5    2

如果您需要确切的名称,也许我们可以添加一个新列

df$status <- c("zero", "non-zero")[(df$gantry_duration != 0) + 1]
table(df$gantry_date, df$status)
#            non-zero zero
#  10/1/2018        4    5
#  10/2/2018        5    2

一种tidyverse的方式

library(dplyr)

df %>%
  mutate(status =  c("zero", "non-zero")[(gantry_duration != 0) + 1]) %>%
  count(gantry_date, status) %>%
  tidyr::pivot_wider(names_from = status, values_from = n)