2011-03-01 87 views
2

親愛的,我有一個直接來自傳感器的數據幀。數據在單個列中提供日期和時間。我希望R能夠識別這些數據,然後在數據框中創建一個與列表中的新日期對應的數字的相鄰列。例如25/02/2011 13:34在數據$ time.date中會給出1個新的列數據$ day,而26/02/2011 13:34數據$ time.date會得到2等等。 ..R中的處理日期和時間數據

有誰知道如何去解決這個問題?預先感謝您的幫助。

+1

一些虛擬數據來說明你的數據,觀察頻率等等會提高你的Q值。從之前的Q我想這是一個YSI探空儀或類似的,每天甚至一小時有很多觀測結果?請參閱我的答案,瞭解如何生成可用於Q.中的虛擬數據集的示例。 – 2011-03-01 18:06:22

+0

您並未說明最終要完成的任務,但您可能會從將時間序列數據放入時間序列類對象(例如xts)而不是data.frame。 – 2011-03-01 18:32:33

回答

4

您可以使用cut() 並將其轉換爲由該呼叫 產生的因子的數字。這裏是虛擬數據爲例:

> sdate <- as.POSIXlt("25/02/2011 13:34", format = "%d/%m/%Y %H:%M") 
> edate <- as.POSIXlt("02/03/2011 13:34", format = "%d/%m/%Y %H:%M") 
> df <- data.frame(dt = seq(from = sdate, to = edate, by = "hours")) 
> head(df) 
        dt 
1 2011-02-25 13:34:00 
2 2011-02-25 14:34:00 
3 2011-02-25 15:34:00 
4 2011-02-25 16:34:00 
5 2011-02-25 17:34:00 
6 2011-02-25 18:34:00 

我們使用cut()削減日期時間列到天。 這會導致以日期作爲標籤的因素。我們轉換這個因素NUMERICS得到 1, 2, ...

> df <- within(df, day <- cut(dt, "day", labels = FALSE))) 
> head(df, 13) 
        dt day 
1 2011-02-25 13:34:00 1 
2 2011-02-25 14:34:00 1 
3 2011-02-25 15:34:00 1 
4 2011-02-25 16:34:00 1 
5 2011-02-25 17:34:00 1 
6 2011-02-25 18:34:00 1 
7 2011-02-25 19:34:00 1 
8 2011-02-25 20:34:00 1 
9 2011-02-25 21:34:00 1 
10 2011-02-25 22:34:00 1 
11 2011-02-25 23:34:00 1 
12 2011-02-26 00:34:00 2 
13 2011-02-26 01:34:00 2 
+0

非常感謝。我究竟在做什麼。輝煌。 – 2011-03-01 18:10:07

+1

請注意,不需要轉換爲數字。只需在'cut.POSIXt'中使用'labels = FALSE'參數即可。 – Ista 2011-03-01 18:29:20

+0

@Ista謝謝你的指針。我在編輯中已經注意到了這一點。 – 2011-03-01 18:51:24

3

你可以做到這一點使用cut.POSIXt。例如:

dat <- data.frame(datetimes = Sys.time() - seq(360000, 0, by=-3600)) 
dat$day <- cut(dat$datetimes, breaks="day", labels=FALSE) 

請注意,這裏假定您的日期時間列的格式爲日期 - 時間類。

有關詳細信息,請參閱?DateTimeClasses

+0

+1 esp用於'labels = FALSE'部分! – 2011-03-01 19:00:09