我有一个像这样的不规则时间间隔
df=data.frame(Date=c("2013-01-08","2013-01-11","2013-01-13","2013-01-21","2013-02-06"), runningtotal=c(800,910,1060,1210,660)
我通过zoo对象发现它可以与常规时间间隔合并,并将0填入缺失值。但是,我需要填写之前的值,除了月份开始用0填充它。所以最终输出是这样的:
date runningtotal
2013-01-01 0
2013-01-02 0
...
2013-01-08 800
2013-01-09 800
2013-01-10 800
2013-01-11 910
2013-01-12 910
2013-01-13 1060
...
2013-02-01 0
而且,为了预测目的而填写这样的价值是否有意义?
感谢。
答案 0 :(得分:1)
使用approxfun
方法尝试constant
。我没有lubridate
并只处理常规Date
个对象。例如:
df<-data.frame(Date=c("2013-01-08","2013-01-11","2013-01-13","2013-01-21","2013-02-06"), runningtotal=c(800,910,1060,1210,660))
df$Date<-as.Date(as.character(df$Date))
#create some new dates
newDates<-seq(df$Date[1],df$Date[5],length.out=10)
intfun<-approxfun(df$Date,df$runningtotal,method="constant",yleft=0,yright=0)
data.frame(newDates,intfun(newDates))
答案 1 :(得分:1)
我会使用na.locf
包中的zoo
。但是你应该在申请之前准备数据。
## generate a vector of dates
mm <- min(DF$Date)
day(mm) <- 1
seq_dates <- seq.POSIXt(mm,max(DF$Date),by='days')
## add zeros valus for the beging of month
DF <- rbind(DF,data.frame(Date=seq_dates[day(seq_dates)==1],runningtotal=0))
library(zoo)
## merge with the sequence of dates , and apply na.locf for previous values.
na.locf(merge(seq_dates,DF,by=1,all.x=TRUE))
我们的想法是应用na.locf
来更改缺失值以及之前的非缺失值。将数据与一系列日期合并(从第一个月到结束日期)将插入缺失值。