3

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

     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 和聚合,但我总结了一整天,我不知道如何在时间列中按小时分解。

而且我有好几天的数据。因此,它不仅限于那一天。从那天开始,几乎每天都到昨天。

谢谢!

4

4 回答 4

2

假设您的示例数据存储在名为“test”的数据框中,则以下内容应该可以解决问题:

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))
于 2015-03-05T17:39:45.547 回答
1

您可以使用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速度很快!

于 2016-10-24T16:40:23.397 回答
0

使用化合物group_by(day,hour)

这样就可以了。

于 2015-03-05T14:28:09.110 回答
0

如果您将您的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"))))
于 2017-05-16T14:25:10.300 回答