0

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()的某种组合来做到这一点。我的尝试如下所示,第 3 行和第 4 行都没有构建上面直接显示的数据框。thicken()pad()

我如何使用padr(), lubridate(), tidyverse(), data.table(),base R或任何你喜欢的方式直接构建上面的数据框?如果需要说明,也不应考虑手动输入每个月。谢谢你。

df %>% 
  thicken("year") %>% 
  # pad(by = "col1") %>%       # line 3
  # pad(by = "col1_year") %>%  # line 4
  print()
4

1 回答 1

1
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
于 2019-10-23T14:21:26.450 回答