我有3133行代表在2000年7月1日至2014年12月31日之间的5296天中的一些付款;也就是说,"日期"功能是不连续的:
> head(d_exp_0014)
Year Month Day Amount Count myDate
1 2000 7 6 792078.6 9 2000-07-06
2 2000 7 7 140065.5 9 2000-07-07
3 2000 7 11 190553.2 9 2000-07-11
4 2000 7 12 119208.6 9 2000-07-12
5 2000 7 16 1068156.3 9 2000-07-16
6 2000 7 17 0.0 9 2000-07-17
我想拟合线性时间趋势变量,
t <- 1:3133
解释支出金额变化的线性模型。
fit_t <- lm(Amount ~ t + Count, d_exp_0014)
然而,这显然是错误的,因为t在日期之间以不同的数量递增:
> head(exp)
Year Month Day Amount Count Date t
1 2000 7 6 792078.6 9 2000-07-06 1
2 2000 7 7 140065.5 9 2000-07-07 2
3 2000 7 11 190553.2 9 2000-07-11 3
4 2000 7 12 119208.6 9 2000-07-12 4
5 2000 7 16 1068156.3 9 2000-07-16 5
6 2000 7 17 0.0 9 2000-07-17 6
对我而言,与线性趋势完全相反。
将此data.frame合并为连续日期索引的最有效方法是什么?会像
那样的日期矢量 CTS_date_V <- as.data.frame(seq(as.Date("2000/07/01"), as.Date("2014/12/31"), "days"), colnames = "Date")
产生不同的结果?
我打开任何软件包(使用fpp,forecast,timeSeries,xts,ts,截至目前);只是寻找一个很好的答案,以功能形式部署,因为这些付款将每周更新,我想自动附加到这个data.frame。
答案 0 :(得分:1)
我认为对常规(连续)时间序列进行某种转换是一个好主意。
您可以使用xts
转换时间序列数据(它很方便,因为它可以像其他常规ts一样在其他包中使用)
# convert myDate to POSIXct if necessary
# create xts from data frame x
ts1 <- xts(data.frame(a = x$Amount, c = x$Count), x$myDate )
ts1
# create empty time series
ts_empty <- seq( from = start(ts1), to = end(ts1), by = "DSTday")
# merge the empty ts to the data and fill the gap with 0
ts2 <- merge( ts1, ts_empty, fill = 0)
# or interpolate, for example:
ts2 <- merge( ts1, ts_empty, fill = NA)
ts2 <- na.locf(ts2)
# zoo-xts ready functions are:
# na.locf - constant previous value
# na.approx - linear approximation
# na.spline - cubic spline interpolation
在您的示例中,现在有重复值的迹象。但基于new question很可能。我想你想用sum
函数聚合值:
ts1 <- period.apply( ts1, endpoints(ts1,'days'), sum)