2010-11-09 39 views
4

這是我從數據記錄器導入原始數據時經常出現的問題。溫度記錄器設置爲每十分鐘記錄一次溫度,並設置一個單獨的氣體記錄器記錄最近十分鐘間隔內使用的氣體。我想將來自這兩個記錄儀的數據合併到一個數據框中進行繪圖和分析,但時間並不完全一致。我想每十分鐘在數據框中有一行,日期時間顯示時間段的開始。如何按時間間隔匹配數據幀?

的溫度記錄儀的數據是這樣的:

  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") 

回答

5

使用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) 
2

使用的zooxts任一來保存你的數據 - 他們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 
> 
+0

謝謝動物園文件鏈接。 – Seth 2010-11-09 22:15:58