day,month cut working but hour cut cause cut.default(as.character(tweet_dat $ datetime),breaks =" Hour"):' x'必须是数字

时间:2016-04-27 16:56:16

标签: r

您正在尝试使用以下时间戳数据将数据剪切为每月,每周,每日和每小时数据

[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

2 个答案:

答案 0 :(得分:0)

试试这个,它是一种特殊的格式,用于将日期转换为字符并在剪切后发生,因此它不会与断点发生冲突。 (至少在我用上面的代码进行测试时没有。

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

我没有得到我认为我会使用它的东西(以前从未用这种方式切片时间)但是它没有错误或NA的工作,并且它与上面复制和粘贴时生成的代码一致。

日期&amp;在R中,时间是最烦人的事情......我希望这会有所帮助!

答案 1 :(得分: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