親愛的,我有一個直接來自傳感器的數據幀。數據在單個列中提供日期和時間。我希望R能夠識別這些數據,然後在數據框中創建一個與列表中的新日期對應的數字的相鄰列。例如25/02/2011 13:34在數據$ time.date中會給出1個新的列數據$ day,而26/02/2011 13:34數據$ time.date會得到2等等。 ..R中的處理日期和時間數據
有誰知道如何去解決這個問題?預先感謝您的幫助。
親愛的,我有一個直接來自傳感器的數據幀。數據在單個列中提供日期和時間。我希望R能夠識別這些數據,然後在數據框中創建一個與列表中的新日期對應的數字的相鄰列。例如25/02/2011 13:34在數據$ time.date中會給出1個新的列數據$ day,而26/02/2011 13:34數據$ time.date會得到2等等。 ..R中的處理日期和時間數據
有誰知道如何去解決這個問題?預先感謝您的幫助。
您可以使用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
非常感謝。我究竟在做什麼。輝煌。 – 2011-03-01 18:10:07
請注意,不需要轉換爲數字。只需在'cut.POSIXt'中使用'labels = FALSE'參數即可。 – Ista 2011-03-01 18:29:20
@Ista謝謝你的指針。我在編輯中已經注意到了這一點。 – 2011-03-01 18:51:24
你可以做到這一點使用cut.POSIXt。例如:
dat <- data.frame(datetimes = Sys.time() - seq(360000, 0, by=-3600))
dat$day <- cut(dat$datetimes, breaks="day", labels=FALSE)
請注意,這裏假定您的日期時間列的格式爲日期 - 時間類。
有關詳細信息,請參閱?DateTimeClasses
。
+1 esp用於'labels = FALSE'部分! – 2011-03-01 19:00:09
一些虛擬數據來說明你的數據,觀察頻率等等會提高你的Q值。從之前的Q我想這是一個YSI探空儀或類似的,每天甚至一小時有很多觀測結果?請參閱我的答案,瞭解如何生成可用於Q.中的虛擬數據集的示例。 – 2011-03-01 18:06:22
您並未說明最終要完成的任務,但您可能會從將時間序列數據放入時間序列類對象(例如xts)而不是data.frame。 – 2011-03-01 18:32:33