【问题标题】:Aggregating data by hour using R使用 R 按小时聚合数据
【发布时间】:2017-01-01 19:24:56
【问题描述】:

我有以下形式的数据:

[1] "Mon Feb 01 09:11:55 +0000 2016" "Mon Feb 01 09:12:11 +0000 2016" ""
[4] "Mon Feb 01 09:14:25 +0000 2016" "" "Mon Feb 01 09:15:40 +0000 2016"

我想用 R 来绘制它。

我想绘制一个每小时的计数图,以便将上午 9 点到 10 点之间的所有计数都统计在一个桶中,依此类推。数据将超过几天,但日期只是小时不重要。我可能还想将小时更改为 30 分钟。 我已经尝试了各种方法,但我的深度有点超出我的理解范围,非常感谢您执行一些基本步骤以使其正常工作。

我试过了:

str <- strptime(dt, "%a %b %d   %H:%M:%S %z %Y", tz = "GMT") 
# head(str,3)
( dt.gmt <- as.POSIXct(str, tz = "GMT") )
format(dt.gmt, tz = "EST", usetz = TRUE)
hms <- format(dt.gmt , format = "%H:%M:%S")
hms<-as.numeric(hms)
head(hms,3)
hms <- table(cut(hms, breaks="hour"))

给出错误:

Error in breaks + 1 : non-numeric argument to binary operator

我也试过了:

aggdata <-aggregate(hms, by=(hms), FUN=mean, na.rm=TRUE)

给出:

Error in aggregate.data.frame(as.data.frame(x), ...) :   'by' must be a list

【问题讨论】:

  • hms 不再是可以按时间规范切割的对象。如果您只关心每小时计数,为什么不只关心hr &lt;- format(dt.gmt , format = "%H")table(hr)
  • 谢谢!看起来不错,是否可以在 20 分钟而不是几个小时内使用相同的东西?它有一种简单的绘制方法吗?
  • 你能链接到数据文件吗?
  • 对不起,我已经离开了。我的数据是公开的种族主义推文,我已尝试对其进行编辑,但如果仍有任何令人反感的材料,我深表歉意:data

标签: r time-series xts zoo


【解决方案1】:

好的,我刚试过,可能对你有帮助

dt <- c("Mon Feb 01 09:11:55 +0000 2016", "Mon Feb 01 10:12:11 +0000 
         2016","Mon Feb 01 09:21:55 +0000 2016" )
df <- data.frame('time' = dt, 
             'id' = c(1, 3, 2))
df$time <- as.POSIXct(gsub("^.+? | \\+\\d{4}","", df$time),
                                                          format = "%B %d %X %Y")
df$time  <- as.POSIXlt(df$time)
df$hour <- format(df$time, format = '%H')
df
pivot <- aggregate(df$id, by = list(df$hour), FUN = length)
pivot

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多