R 如何按时间间隔匹配数据帧?

R 如何按时间间隔匹配数据帧?,r,zoo,xts,R,Zoo,Xts,这是我从数据记录器导入原始数据时经常遇到的问题。温度记录器设置为每十分钟记录一次温度,单独的气体记录器设置为记录最近十分钟间隔内使用的气体。我想将这两个记录器的数据合并到一个数据框中进行绘图和分析,但时间并不完全一致。我希望数据帧中每十分钟有一行,日期时间显示时间段的开始 温度记录器数据如下所示: 气体记录器数据如下所示: 我希望以10分钟的间隔组合两个数据帧,这样组合的数据看起来像: 下面是获取这两个数据帧的一些代码: temps <- data.frame(datetime=c("20

这是我从数据记录器导入原始数据时经常遇到的问题。温度记录器设置为每十分钟记录一次温度,单独的气体记录器设置为记录最近十分钟间隔内使用的气体。我想将这两个记录器的数据合并到一个数据框中进行绘图和分析,但时间并不完全一致。我希望数据帧中每十分钟有一行,日期时间显示时间段的开始

温度记录器数据如下所示:

气体记录器数据如下所示:

我希望以10分钟的间隔组合两个数据帧,这样组合的数据看起来像:

下面是获取这两个数据帧的一些代码:

temps <- data.frame(datetime=c("2010-09-30 06:58:53",
"2010-09-30 07:08:53","2010-09-30 07:18:53",
"2010-09-30 07:28:53","2010-09-30 07:38:53"),
 temperature=c(78.996,78.645,78.514,79.173,78.602),
stringsAsFactors=FALSE)
temps$datetime <- strptime(temps$datetime, format="%Y-%m-%d %H:%M:%S")
gas <- data.frame(datetime=c("2010-09-30 13:45:00",
"2010-09-30 13:55:00","2010-09-30 14:05:00",
"2010-09-30 14:15:00","2010-09-30 14:25:00"),
gas=c(0,1,0,4,2),stringsAsFactors=FALSE)
gas$datetime <- strptime(temps$datetime, format="%Y-%m-%d %H:%M:%S")
temps使用或中的一个来保存数据——它们的
merge()
函数将为您执行此操作。你可以在这里找到以前的答案。文档中也有很多相关的例子

以下是一个实体模型示例:

> set.seed(42)
> temps <- zoo(78+rnorm(5), 
+              order.by=ISOdatetime(2010,9,30,6,58,53)+cumsum(60*runif(5)))
> gas <- zoo(sample(1:5,5), 
+            order.by=ISOdatetime(2010,9,30,6,58,53)+cumsum(60*runif(5)))
> merge(temps,gas)
                     temps gas
2010-09-30 06:59:47 78.048  NA
2010-09-30 06:59:49     NA   5
2010-09-30 07:00:44 76.895  NA
2010-09-30 07:00:48     NA   1
2010-09-30 07:00:55     NA   3
2010-09-30 07:01:01 78.539  NA
2010-09-30 07:01:23     NA   2
2010-09-30 07:01:51 78.580  NA
2010-09-30 07:01:57     NA   4
2010-09-30 07:02:29 77.342  NA
> na.locf(merge(temps,gas))
                     temps gas
2010-09-30 06:59:49 78.048   5
2010-09-30 07:00:44 76.895   5
2010-09-30 07:00:48 76.895   1
2010-09-30 07:00:55 76.895   3
2010-09-30 07:01:01 78.539   3
2010-09-30 07:01:23 78.539   2
2010-09-30 07:01:51 78.580   2
2010-09-30 07:01:57 78.580   4
2010-09-30 07:02:29 77.342   4
> 
>设置种子(42)
>临时气体合并(临时气体,气体)
临时气体
2010-09-30 06:59:47 78.048北美
2010-09-30 06:59:49北美5
2010-09-30 07:00:44 76.895北美
2010-09-30 07:00:48北美1
2010-09-30 07:00:55北美3
2010-09-3007:01:0178.539北美
2010-09-30 07:01:23北美2
2010-09-3007:01:51 78.580北美
2010-09-30 07:01:57 NA 4
2010-09-3007:02:2977.342北美
>不适用于locf(合并(临时、气体))
临时气体
2010-09-30 06:59:49 78.048   5
2010-09-30 07:00:44 76.895   5
2010-09-30 07:00:48 76.895   1
2010-09-30 07:00:55 76.895   3
2010-09-30 07:01:01 78.539   3
2010-09-30 07:01:23 78.539   2
2010-09-30 07:01:51 78.580   2
2010-09-30 07:01:57 78.580   4
2010-09-30 07:02:29 77.342   4
> 

在中使用
align.time

库(xts)

谢谢你的动物园文档链接。
           datetime temperature gas  
2010-09-30 13:40:00 NA          0
2010-09-30 13:50:00 78.996      1
2010-09-30 14:00:00 78.645      0
2010-09-30 14:10:00 78.514      4
2010-09-30 14:20:00 79.173      2
2010-09-30 07:38:53 78.602      NA
temps <- data.frame(datetime=c("2010-09-30 06:58:53",
"2010-09-30 07:08:53","2010-09-30 07:18:53",
"2010-09-30 07:28:53","2010-09-30 07:38:53"),
 temperature=c(78.996,78.645,78.514,79.173,78.602),
stringsAsFactors=FALSE)
temps$datetime <- strptime(temps$datetime, format="%Y-%m-%d %H:%M:%S")
gas <- data.frame(datetime=c("2010-09-30 13:45:00",
"2010-09-30 13:55:00","2010-09-30 14:05:00",
"2010-09-30 14:15:00","2010-09-30 14:25:00"),
gas=c(0,1,0,4,2),stringsAsFactors=FALSE)
gas$datetime <- strptime(temps$datetime, format="%Y-%m-%d %H:%M:%S")
> set.seed(42)
> temps <- zoo(78+rnorm(5), 
+              order.by=ISOdatetime(2010,9,30,6,58,53)+cumsum(60*runif(5)))
> gas <- zoo(sample(1:5,5), 
+            order.by=ISOdatetime(2010,9,30,6,58,53)+cumsum(60*runif(5)))
> merge(temps,gas)
                     temps gas
2010-09-30 06:59:47 78.048  NA
2010-09-30 06:59:49     NA   5
2010-09-30 07:00:44 76.895  NA
2010-09-30 07:00:48     NA   1
2010-09-30 07:00:55     NA   3
2010-09-30 07:01:01 78.539  NA
2010-09-30 07:01:23     NA   2
2010-09-30 07:01:51 78.580  NA
2010-09-30 07:01:57     NA   4
2010-09-30 07:02:29 77.342  NA
> na.locf(merge(temps,gas))
                     temps gas
2010-09-30 06:59:49 78.048   5
2010-09-30 07:00:44 76.895   5
2010-09-30 07:00:48 76.895   1
2010-09-30 07:00:55 76.895   3
2010-09-30 07:01:01 78.539   3
2010-09-30 07:01:23 78.539   2
2010-09-30 07:01:51 78.580   2
2010-09-30 07:01:57 78.580   4
2010-09-30 07:02:29 77.342   4
> 
library(xts)
xTemps <- align.time(xts(temps[,2],as.POSIXct(temps[,1])), n=600)
xGas <- align.time(xts(gas[,2],as.POSIXct(gas[,1])), n=600)
merge(xTemps,xGas)