在 R 中填充日期以添加 missing/blank 个月?
Padding around dates in R to add missing/blank months?
The padr R pacakge vignette 描述了在所述日期和时间周围填充日期和时间的不同包函数。
我现在的情况是,我将在数据框中统计事件(即 dplyr::count()
),并且需要绘制发生的事件,比如... 1 年。当我计算低容量数据框中的事件时,我经常会得到单行项目结果,如下所示:
library(tidyverse)
library(lubridate)
library(padr)
df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)
#> # A tibble: 1 x 3
#> col1 col2 col3
#> <date> <chr> <dbl>
#> 1 2018-10-01 g 5
要使用 ggplot 绘制此图,在一年的时间段内按月绘制,需要 12 行的数据框。它基本上需要看起来像这样:
#> # A tibble: 12 x 3
#> col1 col2 col3
#> <date> <chr> <dbl>
#> 1 2018-01-01 NA 0
#> 2 2018-02-01 NA 0
#> 3 2018-03-01 NA 0
#> 4 2018-04-01 NA 0
#> 5 2018-05-01 NA 0
#> 6 2018-06-01 NA 0
#> 7 2018-07-01 NA 0
#> 8 2018-08-01 NA 0
#> 9 2018-09-01 NA 0
#> 10 2018-10-01 g 5
#> 11 2018-11-01 NA 0
#> 12 2018-12-01 NA 0
也许 padr()
可以通过 thicken()
和 pad()
函数的某种组合来做到这一点。我的尝试如下所示,第 3 行和第 4 行都没有构建上面直接显示的数据框。
我如何使用 padr()
、lubridate()
、tidyverse()
、data.table()
、base R
或您使用的任何方式直接构建上面的数据框请?如果需要说明,则不应考虑每个月的手动输入。谢谢。
df %>%
thicken("year") %>%
# pad(by = "col1") %>% # line 3
# pad(by = "col1_year") %>% # line 4
print()
library(lubridate)
library(tidyverse)
df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)
my_year <- year(df$col1[1])
df2 <- tibble(col1 = seq(ymd(paste0(my_year,'-01-01')),ymd(paste0(my_year,'-12-01')), by = '1 month'))
df3 <- merge(df,df2, by ="col1",all.y=TRUE) %>% mutate(col3 = replace_na(col3,0))
df3
The padr R pacakge vignette 描述了在所述日期和时间周围填充日期和时间的不同包函数。
我现在的情况是,我将在数据框中统计事件(即 dplyr::count()
),并且需要绘制发生的事件,比如... 1 年。当我计算低容量数据框中的事件时,我经常会得到单行项目结果,如下所示:
library(tidyverse)
library(lubridate)
library(padr)
df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)
#> # A tibble: 1 x 3
#> col1 col2 col3
#> <date> <chr> <dbl>
#> 1 2018-10-01 g 5
要使用 ggplot 绘制此图,在一年的时间段内按月绘制,需要 12 行的数据框。它基本上需要看起来像这样:
#> # A tibble: 12 x 3
#> col1 col2 col3
#> <date> <chr> <dbl>
#> 1 2018-01-01 NA 0
#> 2 2018-02-01 NA 0
#> 3 2018-03-01 NA 0
#> 4 2018-04-01 NA 0
#> 5 2018-05-01 NA 0
#> 6 2018-06-01 NA 0
#> 7 2018-07-01 NA 0
#> 8 2018-08-01 NA 0
#> 9 2018-09-01 NA 0
#> 10 2018-10-01 g 5
#> 11 2018-11-01 NA 0
#> 12 2018-12-01 NA 0
也许 padr()
可以通过 thicken()
和 pad()
函数的某种组合来做到这一点。我的尝试如下所示,第 3 行和第 4 行都没有构建上面直接显示的数据框。
我如何使用 padr()
、lubridate()
、tidyverse()
、data.table()
、base R
或您使用的任何方式直接构建上面的数据框请?如果需要说明,则不应考虑每个月的手动输入。谢谢。
df %>%
thicken("year") %>%
# pad(by = "col1") %>% # line 3
# pad(by = "col1_year") %>% # line 4
print()
library(lubridate)
library(tidyverse)
df <- tibble(col1 = as.Date("2018-10-01"), col2 = "g", col3 = 5)
my_year <- year(df$col1[1])
df2 <- tibble(col1 = seq(ymd(paste0(my_year,'-01-01')),ymd(paste0(my_year,'-12-01')), by = '1 month'))
df3 <- merge(df,df2, by ="col1",all.y=TRUE) %>% mutate(col3 = replace_na(col3,0))
df3