如何将变量从一个数据帧插入到R中的另一个匹配时间

时间:2014-07-17 03:34:50

标签: r time-series interpolation

我有来自两个独立温度数据记录器的数据。它们都有时间 Celsius 作为列。下面是将从两个数据记录器重新创建15个值的子集的代码。它们通常会关闭几秒钟。

Time <- as.POSIXct(c("2014-07-16 13:09:38", "2014-07-16 13:09:48", "2014-07-16 13:09:58", "2014-07-16 13:10:08", "2014-07-16 13:10:18", "2014-07-16 13:10:28", "2014-07-16 13:10:38", "2014-07-16 13:10:48", "2014-07-16 13:10:58", "2014-07-16 13:11:08", "2014-07-16 13:11:18", "2014-07-16 13:11:28", "2014-07-16 13:11:38", "2014-07-16 13:11:48", "2014-07-16 13:11:58"))
Celsius <- c(27.5, 27.5, 27.5, 28, 28, 28, 28, 28, 28.5, 28.5, 28.5, 28.5, 28.5, 29, 29)
df1 <- data.frame(Time,Celsius)
Time <-  as.POSIXct(c("2014-07-16 13:09:39", "2014-07-16 13:09:49", "2014-07-16 13:09:59", "2014-07-16 13:10:09", "2014-07-16 13:10:19", "2014-07-16 13:10:29", "2014-07-16 13:10:39", "2014-07-16 13:10:49", "2014-07-16 13:10:59", "2014-07-16 13:11:09", "2014-07-16 13:11:19", "2014-07-16 13:11:29", "2014-07-16 13:11:39", "2014-07-16 13:11:49", "2014-07-16 13:11:59"))
Celsius <- c(26.6666666666667, 26.6666666666667, 26.6666666666667, 27.2222222222222, 27.2222222222222, 27.2222222222222, 27.2222222222222, 27.7777777777778, 27.7777777777778, 27.7777777777778, 27.7777777777778, 27.7777777777778, 28.3333333333333, 28.3333333333333, 28.3333333333333)
df2 <- data.frame(Time,Celsius)

如何在与第一个数据帧中的时间匹配的第二个数据帧上插入(线性) Celsius 我可以在第几个数据帧中丢失几行开头或结尾。

1 个答案:

答案 0 :(得分:2)

我认为approxfun会派上用场。首先,您要确保温度测量值是数字。在您的示例中,由于某些原因,它们似乎是因素,因此您可以使用

更改它们
df1$Celsius<-as.numeric(as.character(df1$Celsius))
df2$Celsius<-as.numeric(as.character(df2$Celsius))

现在我们可以使用approxfun df2来定义从日期/时间到临时值的翻译功能。

tx<-approxfun(df2$Time, df2$Celsius)

然后在df1$Time上使用该函数来预测每df2次的df1温度

tx(df1$Time)