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