在 R 中按组填充数据框的行

Fill rows of a data frame by group in R

我想转换这个数据框:

id date X
001 2022-04-12 dsf
001 2022-04-13 df
001 2022-04-14 sdw
002 2022-04-12 we3
002 2022-04-13 r45
002 2022-04-14 2s
003 2022-04-12 de65
003 2022-04-13 hjk
004 2022-04-12 vcbdf
005 2022-04-12 342f

给这个:

id date X
001 2022-04-12 dsf
001 2022-04-13 df
001 2022-04-14 sdw
002 2022-04-12 we3
002 2022-04-13 r45
002 2022-04-14 2s
003 2022-04-12 de65
003 2022-04-13 hjk
003 2022-04-14 NA
004 2022-04-12 vcbdf
004 2022-04-13 NA
004 2022-04-14 NA
005 2022-04-12 342f
005 2022-04-13 NA
005 2022-04-14 NA

如您所见,日期目标是从 2022-04-12 到 2022-04-14,因此应填写没有所有日期的行。

有什么想法吗?

您可以使用 tidyr::complete 为每个 id 创建从最小日期值到最大值的日期序列。

library(dplyr)
library(tidyr)

df %>%
  mutate(date = as.Date(date)) %>%
  complete(id, date = seq(min(date), max(date), 'days'))

# A tibble: 15 × 3
#       id date       X    
#   <int> <date>     <chr>
# 1     1 2022-04-12 dsf  
# 2     1 2022-04-13 df   
# 3     1 2022-04-14 sdw  
# 4     2 2022-04-12 we3  
# 5     2 2022-04-13 r45  
# 6     2 2022-04-14 2s   
# 7     3 2022-04-12 de65 
# 8     3 2022-04-13 hjk  
# 9     3 2022-04-14 NA   
#10     4 2022-04-12 vcbdf
#11     4 2022-04-13 NA   
#12     4 2022-04-14 NA   
#13     5 2022-04-12 342f 
#14     5 2022-04-13 NA   
#15     5 2022-04-14 NA