当我从数据记录器导入原始数据时,这是一个经常出现的问题。温度记录仪设置为每十分钟记录一次温度,并设置一个单独的气体记录仪记录最后十分钟间隔内使用的气体。我想将这两个记录器的数据合并到一个数据框中进行绘图和分析,但时间并不完全一致。我想在每十分钟的时间段内在数据框中有一行,日期时间显示时间段的开始。
温度记录器数据如下所示:
datetime temperature 2010-09-30 06:58:53 78.996 2010-09-30 07:08:53 78.645 2010-09-30 07:18:53 78.514 2010-09-30 07:28:53 79.173 2010-09-30 07:38:53 78.602
气体记录器数据如下:
datetime gas 2010-09-30 13:45:00 0 2010-09-30 13:55:00 1 2010-09-30 14:05:00 0 2010-09-30 14:15:00 4 2010-09-30 14:25:00 2
我希望以十分钟的间隔组合两个数据帧,以便组合数据看起来像:
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")
答案 0 :(得分:5)
在xts中使用align.time
。
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)
答案 1 :(得分:2)
使用zoo或xts中的任何一个来保存您的数据 - 他们的merge()
功能会为您执行此操作。您可以在此处查找以前的答案。 zoo文档还有很多相关的例子。
这是一个模拟示例:
> 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
>