2016-04-27 70 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