从 DF 中的开始日期开始为每个 Id 分配每月日期记录

Assign monthly date record for each Id from starting dates in a DF

我有一个这样的数据框“DF”:

  Id    Ctrl_num   Ctrl_date
00167      1       1988-10-15
00167      2           NA
00167      3           NA
00168      1       1990-02-15
00168      2           NA
00168      3           NA
00207      1       1988-11-15
00207      2           NA
00207      3           NA

重要提示:Crtl_date 列附后 as.Date 格式

我需要做的是生成缺失的 Crtl_date 值。我得到了每个 Id 的第一个控制日期 我知道以下控制是按月频率进行的。

DF 应该是这样的:

 Id    Ctrl_num   Ctrl_date
00167    1        1988-10-15
00167    2        1998-11-14
00167    3        1998-12-14
00168    1        1990-02-15
00168    2        1990-03-17
00168    3        1990-04-16
00207    1        1988-11-15
00207    2        1988-12-15
00207    3        1989-01-14

我最好的尝试

DF$Ctrl_date2 <- seq(as.Date('1988-10-15'), by='30 day', length=3)

我的问题是我不知道如何让每个 Id 的月度控件序列从第一个现有控件开始。

运行 这段代码应该给你一个包含你想要的内容的向量:

#Defining data
Id = c(00167,00167,00167,00168,00168,00168,00207,00207,00207)
Ctrl_num = c(1,2,3,1,2,3,1,2,3)
Ctrl_date = c('1988-10-15',NA,NA,'1990-02-15',NA,NA, '1988-11-15',NA,NA)
df = data.frame(Id, Ctrl_num, Ctrl_date)

#Finds index of known dates
ID = which(!is.na(df$Ctrl_date))
#Finds needed length of sequence
d = diff(c(ID, length(df$Ctrl_date) + 1))

#Creates new date-vector
ctrl_date2 = as.Date(rep(NA,length(df$Ctrl_date)))
for(i in 1:length(ID)){
  ctrl_date2[ID[i]:(ID[i]+d[i]-1)] = seq(as.Date(df$Ctrl_date[ID[i]]), 
                                         by='30 day', length.out=d[i])
}
ctrl_date2