首页 > 解决方案 > 为 R 中的缺失值填充零

问题描述

我正在努力解决这个问题。我有一个带有日期列的 df,我想计算每小时的发生次数。这是我所做的:

x <- df %>% 
  mutate(hora = hour(date)) %>% 
  select(hora) %>% 
  count(hora)

结果是:

> x
# A tibble: 19 x 2
    hora     n
   <int> <int>
 1     0     1
 2     1     1
 3     3     1
 4     8     4
 5     9     7
 6    10    10
 7    11    14
 8    12    10
 9    13     8
10    14     4
11    15     5
12    16    12
13    17     4
14    18    12
15    19     9
16    20     5
17    21     2
18    22     4
19    23     4

如您所见,有些小时没有出现n=0,例如 2 或4:7。我想要的是添加不在x其中的时间,n=0以便表格完整。

预期的输出应该是这样的:

 hora  n
1     0 12
2     1  3
3     2  5
4     3  7
5     4  8
6     5  1
7     6  0
8     7 11
9     8  6
10    9 10
11   10  9
12   11  0
13   12  0
14   13  3
15   14  0
16   15  7
17   16  8
18   17  1
19   18  2
20   19 11
21   20  6
22   21 10
23   22  9
24   23  4

我尝试创建一个包含小时数0:23和所有时间的表,n=0并尝试对这两个表求和,但显然这不起作用。我也尝试过x$hour <- 0:23,认为会添加缺失值,但效果不佳。

标签: rtibble

解决方案


您可以转换horafactor并使用.drop = FALSEincount

library(dplyr)
library(lubridate)

df %>%  
   mutate(hora = factor(hour(date), levels = 0:23)) %>%  
   count(hora, .drop = FALSE)

另一种选择是使用complete

df %>%  
  mutate(hora = hour(date)) %>%  
  count(hora) %>%
  tidyr::complete(hora = 0:23, fill = list(n = 0))

推荐阅读