当我从数据记录器中导入原始数据时,这是一个问题。温度记录仪设置为每十分钟记录温度,并将单独的气体记录仪设置为记录最后十分钟间隔中使用的气体。我想将这两个记录仪的数据组合到单个数据框架中,以进行绘图和分析,但是时间并不完全对齐。我想在每个十分钟的数据框中有一行,而日期时间显示了时间段的开始。

温度记录器数据看起来像:

           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

我想在10分钟间隔组合两个数据帧,以使组合数据看起来像:

           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")
有帮助吗?

解决方案

采用 align.timeXTS.

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)

其他提示

使用任何一个 动物园 或者 XTS 持有您的数据 - 他们 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
> 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top