以下是我的数据示例。
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并汇总,但我总结了一整天,我不确定如何按时间栏中的小时分解。
我有多天的数据。所以它不仅仅适用于那一天。从那天开始,几乎每天都是直到昨天。
谢谢!
答案 0 :(得分:1)
假设您的示例数据存储在名为“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))
答案 1 :(得分: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
非常快!
答案 2 :(得分:0)
使用复合group_by(day,hour)
那就行了。
答案 3 :(得分:0)
如果您将date
和time
列转换为单个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"))))