R使用以前的数字将不规则时间间隔转换为常规时间间

时间:2014-09-14 12:27:59

标签: r datetime time-series zoo

我有一个像这样的不规则时间间隔

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

而且,为了预测目的而填写这样的价值是否有意义?

感谢。

2 个答案:

答案 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来更改缺失值以及之前的非缺失值。将数据与一系列日期合并(从第一个月到结束日期)将插入缺失值。