r-按天和小时获取数据的总和



下面是我拥有的数据示例。

     date       time    size    filename            day.of.week
1   2015-01-16  5:36:12 1577    01162015053400.xml  Friday
2   2015-01-16  5:38:09 2900    01162015053600.xml  Friday
3   2015-01-16  5:40:09 3130    01162015053800.xml  Friday

我想做的是总结每小时的文件大小。

我想要一个结果数据表,看起来像:

date        hour   size
2015-01-16  5      7607
2015-01-16  6      10000

等等。

但我似乎无法得到我需要的输出。

我试过ddply和aggregate,但我正在总结一整天,我不知道如何在时间栏中按小时细分。

我有好几天的数据。所以这不仅仅是为了那一天。从那天开始,几乎每天都是,直到昨天。

谢谢!

假设您的示例数据存储在一个名为"测试"的数据帧中,则以下内容应该可以完成此操作:

library(lubridate) # for hms and hour functions
test$time <- hms(test$time) 
test$hour <- factor(hour(test$time))
library(dplyr)
test %>%
   select(-time) %>% # dplyr doesn't like this column for some reason
   group_by(date, hour) %>%
   summarise(size=sum(size))

您可以使用data.table

library(data.table)
# Define a time stamp column.
dt[, timestamp=as.POSIXct(strptime(paste(df$date, df$time), format = "%Y-%m-%d %H:%M:%S"))]
# Aggregate by hours
dt[, size = .N, by = as.POSIXct(round(timestamp, "hour"))]

好处是data.table燃烧得很快!

使用化合物group_by(day,hour)

这样就可以了。

如果将datetime列转换为单个POSIX日期when(类似于以前的答案,即df$when <- as.POSIXct(strptime(paste(df$date, df$time), format = "%Y-%m-%d %H:%M:%S"))),则可以使用:

aggregate(df[c("size")], FUN=sum, by=list(d=as.POSIXct(trunc(df$when, "hour"))))

相关内容

  • 没有找到相关文章

最新更新