从 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
我有一个这样的数据框“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