2016-04-27 53 views
0

您好,我試圖將數據削減到每月,每週,每日每時使用套以下時間戳數據

[1] "2015-12-31 13:54:00 AEDT" "2015-12-30 12:41:00 AEDT" "2015-12-30 07:14:00 AEDT" "2015-12-30 03:07:00 AEDT" 
[5] "2015-12-30 02:27:00 AEDT" "2015-12-29 17:09:00 AEDT" "2015-12-29 17:07:00 AEDT" "2015-12-29 16:46:00 AEDT" 
[9] "2015-12-29 16:17:00 AEDT" "2015-12-29 15:10:00 AEDT" "2015-12-29 14:22:00 AEDT" "2015-12-29 12:17:00 AEDT" 
[13] "2015-12-28 12:45:00 AEDT" "2015-12-28 11:13:00 AEDT" "2015-12-27 21:25:00 AEDT" "2015-12-27 20:25:00 AEDT" 

我用下面從要素轉換爲posixlt日期格式:

td$datetime <- as.POSIXlt(as.character(td$time), format="%Y-%m-%d %H:%M") 

str(td) 
datetime   : POSIXlt, format: "2015-12-31 13:54:00" "2015-12-30 12:41:00" "2015-12-30 07:14:00" "2015-12-30 03:07:00" ... 

以下3都做工精細:

# create a column for month time break 
td$month <- as.Date(cut(td$datetime, breaks = "month")) 

# create a column for weekly time break 
td$week <- as.Date(cut(td$datetime, breaks = "week", start.on.monday = FALSE)) 

# create a column for daily time break 
td$day <- as.Date(cut(td$datetime, breaks = "day")) 

但是當我做每小時,這是行不通的

td$hour <- as.Date(cut(as.character(td$datetime), breaks = "hour")). 
I get the following error 
Error in cut.default(as.character(td$datetime), breaks = "Hour") : 
    'x' must be numeric 
+0

無需轉換爲字符和日期。嘗試:cut(td $ datetime,breaks =「hour」) – Dave2e

+0

嗨戴夫,我試過了 - 看起來切入日,周,月的工作非常好,但是切入幾小時或者產生一天的切換或者一個錯誤,取決於對我的嘗試。最新我嘗試的是如下所示:td $ hour < - as.Date.character(cut(td $ datetime,breaks =「hour」))then t_freq_day_hour < - table(format(td $ hour2,「%d-%b - %Y%H:%M「)))。日期時間爲posix ie:$ datetime:POSIXlt,格式:「2015-12-31 13:54:00」「2015-12-30 12:41:00」「2015-12-30 07:14:00」 「 – maric

回答

0

我找到答案該作品,並希望分享!

td$hour2 <- as.POSIXct(cut(td$datetime, breaks = "hour")) #finally - a cut works 

關鍵是使用POSITct剪切而不是剪切,這似乎沒有提取小時粒度。

我做一個彙總,這樣測試它:

td_freq_day_hour <- table(format(td$hour2,"%d-%b-%Y %H:%M")) 

,並獲得每小時以下數爲例:

   1     2     
27-Dec-2015 04:00 27-Dec-2015 20:00 
0

試試這個,它是將日期轉換爲字符的特殊格式和切後發生,因此它不會與破發點衝突。 (至少不是我上面的代碼進行了測試。

td$hour <- as.Date.character(cut(td$datetime, breaks = "hour"))

我沒有得到什麼,我想我會得到之前使用這個(從來沒有切片時間,在這種方式),但它的工作沒有錯誤或NA的,它似乎與複製和粘貼時,你的代碼上述製造直列。

日期&時間是最討厭的事惹R中....我希望這有助於!

+0

非常感謝,但是,對不起,這不適合我。這是我做的,如果我不明白prop.td $小時< - as.Date.character(cut(td $ datetime,break =「hour」))then t_freq_day_hour < - table(format(td $ hour2,「%d-%b-%Y%H:%M」))。日期時間爲posix,即:$ datetime:POSIXlt,format: 「2015-12-31 13:54:00」「2015-12-30 12:41:00」「2015-12-30 07:14:00」「 – maric

+0

我很確定,我沒跟着你在裁員之後你如何使用數據,這就是爲什麼它不起作用。看到瑪麗克的答案如何完成你所期望的任務,我的失敗是因爲我沒有試圖給出同樣的答案。我很抱歉不理解你想要什麼。 – sconfluentus

+0

一切都好,感謝你的努力。我通過搜索幾個論壇找到它。你對日期時間混亂不錯。 – maric