我有两个包含时间序列的数据帧(时间编码为数字,而不是时间对象;时间未排序)。我想将一个数据帧中的响应变量标准化为另一数据帧中的响应变量。问题在于两个数据帧中的时间点并不完全相等。因此,我需要通过两个时间列的近似匹配来合并两个数据帧。

数据如下所示:

df1 <- structure(list(t1 = c(3, 1, 2, 4), y1 = c(9, 1, 4, 16)), .Names = c("t1", "y1"), row.names = c(NA, -4L), class = "data.frame")
df2 <- structure(list(t2 = c(0.9, 4.1), y2 = structure(1:2, .Label = c("a", "b"), class = "factor")), .Names = c("t2", "y2"), row.names = c(NA, -2L), class = "data.frame")

结果应如下所示:
t1  y1    y2
 1   1    a
 4  16    b

好像approxapproxfun似乎很有用,但我还不太清楚该怎么做。

最佳答案

您可以使用来自Zoo的na.approx轻松完成此操作:

library(zoo)
Data <- merge(df1, df2, by.x="t1", by.y="t2", all=TRUE)
Data$y1 <- na.approx(Data$y1, na.rm=FALSE, rule=2)
na.omit(Data)
#    t1 y1 y2
# 1 0.9  1  a
# 6 4.1 16  b

您也可以使用approx做到这一点:
Data <- merge(df1, df2, by.x="t1", by.y="t2", all=TRUE)
y1.na <- is.na(Data$y1)
Data$y1[y1.na] <- (approx(Data$y1, rule=2, n=NROW(Data))$y)[y1.na]

关于r - 通过近似列值合并数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12922281/

10-12 17:54
查看更多