我有来自两个独立温度数据记录器的数据。它们都有时间和 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 ?我可以在第几个数据帧中丢失几行开头或结尾。
答案 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)