2017-03-17 59 views
0

的我有以下形式的數據:如何子集連續幾天定時之間的數據,連續數月的數據

DateTime   |  Var1 
11/01/2016 06:01 |  0 
11/01/2016 06:02 | 0.70 
... 
... 
11/01/2016 23:59 | 35.08 
11/02/2016 00:01 | 33.29 
... 
11/02/2016 06:00 | 24.62 
... 
11/30/2016 23:59 | 42.08 
12/01/2016 00:01 | 39.79 
.... 

我〜5點月的數據。我必須將數據從1天的上午6點到第二天上午6點之前的數據進行分組。一旦手頭有日期,我可以使用以下代碼對數據進行子集化,但是如何自動從輸入數據中獲取所有連續日期?

Date1 <- as.integer(as.POSIXct(Date1)) 
Date2 <- as.integer(as.POSIXct(Date2)) 
subset <- subset(data, as.integer(as.POSIXct(data$txtime)) >= Date1 & as.integer(as.POSIXct(data$txtime)) < Date2) 

現在,我可以使用下面的代碼在一個月內獲得連續的日期,但這不會爲一個月,其中待子集的部分數據的最後一天工作,是第一下個月的一天。所以我不能在11月30日早上6點到11月1日凌晨5點59分期間自動完成。此外,代碼並非完全自動化,因爲循環中使用的天數在幾個月內有所不同。

for (dateofmonth in c(1:29)) { 
Date1 <- paste("2016-11-", dateofmonth, ' 06:00:00', sep = '') 
Date2 <- paste("2016-11-", (dateofmonth+1), ' 06:00:00', sep = '') 
} 

有可能是一個更簡單的方法來做到這一點,但我無法弄清楚。請建議。

回答

0

試試這個:

datelist <- split(data, as.Date(as.POSIXct(data$txtime)-21600)) 

這在6小時向後改變你的時間,然後按日期拆分您的數據。這樣每個子數據框將包含該日期上午6點到第二天上午5點59分的時間。

+0

有沒有辦法將它分爲數據框?我想在子集化後對數據進行計算,並且數據框可能更有用。 – Sree

+0

結果'datelist'的每個元素都是子集數據框。您可以運行計算到特定的子集或通過使用'lapply'應用於所有子集。 – Feng