2015-05-13 90 views
-3

我有一個數據框,其中包含一個連續日期時間列(A列)的小時和幾個參數列(例如列B到Z)與測量值。R中兩個給定時間之間的數據值差異

我的問題是,如果我想計算B列中某個參數在特定時間段內的差異,例如早上6點 - 前一天下午8點,應該如何編寫代碼?

使用一些隨機數的例子的測試數據:

hour <- seq(as.POSIXct("2014/01/01 00:00:00",tz="EST"), as.POSIXct("2014/3/31 23:00:00",tz="EST"), by="hour") 
PM <- runif(2160, 0, 50) 
NO <- runif (2160, 0, 200) 
test <- data.frame(hour,PM,NO) 

我如何計算PM 06:00之間在第二天和前一天在每一個夜晚的區別下午8點?因此,實際上並不是在同一天計算差異,而是在第2天(早上6點)和第1天(晚上8點)之間進行計算。

+3

請提供一個[最小可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),包括一個樣本數據集和您嘗試的任何代碼。 –

回答

0

您在尋找哪種系統的解決方案?

在T-SQL的情況下,它可能是這樣的:

SELECT MAX(ColumnB)-MIN(ColumnB) AS Column_B_Diff 
FROM Data_table 
WHERE Date >= '2011/02/25 20:00:00.000' and Date <= '2011/02/26 06:00:00.000' 

這不是語法測試,但可能你指出正確的方向。

+0

他正在尋找'r'解決方案(該問題有其標籤)。但是,您的解決方案可能也適用於正確的軟件包。 –

+0

大衛,感謝您的糾正並解釋 –

0

由於時間不夠,有些笨拙的解決方案。如果你相信,每天將在上午6點和晚上8點的條目,您可以使用子集:

hour <- seq(as.POSIXct("2014/01/01 00:00:00",tz="EST"), as.POSIXct("2014/3/31 23:00:00",tz="EST"), by="hour") 
PM <- runif(2160, 0, 50) 
NO <- runif (2160, 0, 200) 
test <- data.frame(hour,PM,NO) 
test6 = subset(test,grepl("06:00:00",test$hour) == T) 
test8 = subset(test,grepl("20:00:00",test$hour) == T) 
diffPM = test8$PM - test6$PM 

當然,也有很多更好的解決方案,檢查PM的差異屬於同一天,但作爲一開始你可能會使用該工作

+0

感謝您的回答。是的,你提出了一個好點。有些日子,我確實在兩次或兩次都缺少數據。另外,您的方法是在同一天計算差異,但我想計算第2天早上6點到第1天晚上8點的PM差異,實際上是晚上的開始時間和結束時間。 – Vicki1227

+0

啊!那麼解決方案將無法工作。剛剛看到編輯 –

+0

定義缺失數據 - 在PM和NO中沒有完整的行,比如說06:00:00或者「NA」? –