R 按天和小时获取数据的聚合和

R 按天和小时获取数据的聚合和,r,aggregate,compound-key,R,Aggregate,Compound Key,下面是我拥有的数据示例 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 Frid

下面是我拥有的数据示例

     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和AGGRATE,但我总结了一整天,我不知道如何在时间栏中按小时细分

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


谢谢

使用化合物
分组(天、小时)


这样就可以了。

假设您的示例数据存储在名为“test”的数据框中,那么下面的步骤就可以了:

library(lubridate)#用于hms和小时功能
test$time%#dplyr由于某些原因不喜欢此列
分组依据(日期、小时)%>%
总结(大小=总和(大小))

您可以使用
数据表

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"))]

好处是
数据。表
的速度非常快

如果在
(类似于前面的答案,即,
df$,当我认为可以的时候,但时间列是一个因子,我找不到一种方法将因子转换为时间,只转换为日期时间。我需要将日期和时间列组合在一起,并将它们转换为DateTime类吗?您不一定需要组合它们,但这是一种可行的方法。Se在这个问题上有很多重复的问题,它已经被问了很多次了,这一点都不好笑。请指出并标记为重复。这对网站来说比再次回答同一个问题更有用。@Benjamin:它确实提供了一个问题的答案。关键部分是一个由表达式组成的复合组。请再次阅读。如果操作蚂蚁想问一个后续问题(“但我不想用一个复合的group_来表达……如何转换成一个统一的datetime字段”),这是他们的问题。你在这个问题上偏离了方向。这不是问的问题。我回答了问的问题。我们不会重复没有问的问题。我认为这个答案是正确的(现在)没有帮助,因为它非常不完整:原始数据帧既没有
,也没有
小时
。我的数据帧称为s3_文件。当我将所有测试实例更改为s3_文件并运行此操作时,我得到一个返回的数字,1220046076。我相信这是所有文件的总和。不是按小时计算的。或者a)你(在这种情况下,我推荐dplyr)或者b)你。不管怎样,这都是一个副本。一旦你澄清了你喜欢哪一个,这应该作为副本关闭。我的建议是dplyr,通过表达式使用复合组_,它的性能和干净性。我不知道
round(timestamp,“hour”)
(我的问题缺少的链接)。
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"))]
aggregate(df[c("size")], FUN=sum, by=list(d=as.POSIXct(trunc(df$when, "hour"))))