【问题标题】:Get aggregate sum of data by day and hour按天和小时获取数据的总和
【发布时间】:2015-05-06 22:45:31
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

标签: r aggregate compound-key


【解决方案1】:

使用复合group_by(day,hour)

这样就可以了。

【讨论】:

  • 我认为可以,但时间列是一个因素,我找不到将因素转换为时间的方法,只有日期时间。我是否需要将日期和时间列组合在一起并将它们转换为 DateTime 类?
  • 您不一定需要将它们组合起来,但这是一种可行的方法。看到关于那个问题的所有许多重复,它被问了很多次,这并不好笑。
  • 请指出并标记为重复。这对网站来说比再次回答同样的问题更有用。
  • @Benjamin:它肯定确实提供了这个问题的答案。关键部分是一个复合 group_by 表达式。再读一遍。如果 OP 想问一个后续问题(“但我不想使用复合 group_by 表达式......如何转换为一个统一的日期时间字段”),那就是他们的问题。你在这件事上偏离了方向。这不是问的问题。我回答了问的问题。我们不会重复未提出的问题。
  • 我认为这个答案(就像现在一样)没有帮助,因为它非常不完整:原始数据框既没有day,也没有hour
【解决方案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))

【讨论】:

  • 我的数据框叫做 s3_files。当我将所有测试实例更改为 s3_files 并运行它时,我得到一个数字,1220046076。我相信这是所有文件的总和。不是按小时计算。
【解决方案3】:

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

【讨论】:

  • 我不知道round(timestamp, "hour")(我的问题的缺失链接)。
【解决方案4】:

如果您将 datetime 列转换为单个 POSIX 日期 when(类似于之前的答案,即 df$when &lt;- 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"))))

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 2016-07-23
    • 2017-05-03
    • 2021-01-26
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多