我有两个数据框。 一个由三个变量组成,即“日期”,“罢工”和“卷”,每天20次观察,每月100次,每年1200次(交易日),看起来像这样
Date Price Vol
2008-09-01 20 0.2
2008-09-01 30 0.5
...
因此,对于每个月我都有一定的价格和体积值,分别为10到40,0.1到0.7 第二个包括来自第一个的内插值。所以我不再有日期了,不过其他变量的小步骤:
Price Vol
20 0.2
21 0.21
22 0.24
30 0.5
因此,虽然一帧显示离散时间内的值,但另一帧或多或少是连续性的 现在我的问题是:怎么可能告诉R将第二个数据框合并到第一个数据框中,接管两个离散数据框之间的连续价格/体积的日期,得到这样的结果:
Date Price Vol
2008-09-01 20 0.2
2008-09-01 21 0.21
2008-09-01 22 0.24
...
2008-09-01 30 0.5
我无法弄明白该怎么做。我总是以不再按升序排列的日期结束NA值。
非常感谢您的支持 达尼
答案 0 :(得分:4)
首先,使用时间序列类(例如zoo
或xts
)。
您的第二个插值时间序列应该仍然有一个时间戳,即使它是每小时或每分钟等。使用merge
将它们组合在一起,然后使用na.locf
从中携带值低频时间序列。
以下是一个例子:
ts1 <- zoo(1:5, as.POSIXct(as.Date("2010-10-01") + 1:5))
ts2 <- zoo(1:(5 * 24), as.POSIXct("2010-10-01 00:00:00") + (1:(5 * 24) * 3600))
na.locf(merge(ts1, ts2))
答案 1 :(得分:2)
我完全错过了第一篇文章。这个是日期。但我同意Shane的观点,除非某些下游功能需要数据帧,否则时间序列是一个好主意。
A <- data.frame(date=rep("2001-05-25", 2), price=c(20, 30), vol=c(0.2, 0.5))
B <- data.frame(price=seq(min(A$price), max(A$price), by=1))
C <- merge(A, B, all=TRUE)
index <- which(!is.na(C$vol))
for (i in seq(nrow(A))[-1]) {
C$date[index[i-1]:index[i]] <- rep(A$date[i-1], A$price[i] - A$price[i-1] + 1)
C$vol[index[i-1]:index[i]] <- seq(A$vol[i-1], A$vol[i], length=(A$price[i] - A$price[i-1] + 1))
}
ans <- C[, c(2, 1, 3)]
ans
date price vol
1 2001-05-25 20 0.20
2 2001-05-25 21 0.23
3 2001-05-25 22 0.26
4 2001-05-25 23 0.29
5 2001-05-25 24 0.32
6 2001-05-25 25 0.35
7 2001-05-25 26 0.38
8 2001-05-25 27 0.41
9 2001-05-25 28 0.44
10 2001-05-25 29 0.47
11 2001-05-25 30 0.50