【问题标题】:Grouping data over time interval按时间间隔对数据进行分组
【发布时间】:2021-07-07 22:59:39
【问题描述】:

我拥有数周内来自多家商店的大量销售信息数据集。我需要计算每分钟的收入和平均价格,但我想不出一个聪明的方法来做到这一点。因此,例如对于下面的数据,我想计算 10 分钟期间的收入和平均价格,例如 2019 年 2 月 11 日从 09:10:00 到 09:20:00 的 10 分钟期间将导致 2 * 14 + 5 * 9。我考虑过用数字标记每个间隔并添加带有标签的列,但我真的不知道如何实现这一点。我想到的另一个选择是使用间隔创建一个单独的数据帧,然后以某种方式将原始数据中的信息映射到间隔数据帧,但我也没有走得太远。对此的任何帮助将不胜感激!

示例数据:

Time Quantity Price
2019-02-11 09:15:23 2 14
2019-02-11 09:18:01 5 9
2019-02-11 10:15:23 1 12
2019-02-11 09:28:01 5 9

【问题讨论】:

  • 您能否尝试使您的问题更具重现性?例如,使用dput(head(data)) 生成易于复制并粘贴到 R 中的数据。向我们展示您尝试过的代码。你的预期输出是什么? stackoverflow.com/questions/5963269/…
  • 对不起,笨拙的格式,我对此有点陌生。幸运的是,crestor 的解决方案很有效,输出正是我想要的。

标签: r


【解决方案1】:
library(tidyverse)
library(lubridate)


df <- read.table(textConnection("time;quantity;unit_price
2019-02-11 09:15:23;2;14
2019-02-11 09:18:01;5;9
2019-02-11 10:15:23;1;12
2019-02-11 09:28:01;5;9"),
                 sep = ";",
                 header = TRUE)
df1 <- df %>%
  mutate(
    time = lubridate::ymd_hms(time),
    time_10min = floor_date(time, "hour") + minutes(minute(time) %/% 10 * 10)
  )
df1
#>                  time quantity unit_price          time_10min
#> 1 2019-02-11 09:15:23        2         14 2019-02-11 09:10:00
#> 2 2019-02-11 09:18:01        5          9 2019-02-11 09:10:00
#> 3 2019-02-11 10:15:23        1         12 2019-02-11 10:10:00
#> 4 2019-02-11 09:28:01        5          9 2019-02-11 09:20:00

df1 %>%
  group_by(time_10min) %>%
  summarise(avg_price = mean(unit_price),
            revenue = sum(quantity * unit_price))
#> # A tibble: 3 x 3
#>   time_10min          avg_price revenue
#>   <dttm>                  <dbl>   <int>
#> 1 2019-02-11 09:10:00      11.5      73
#> 2 2019-02-11 09:20:00       9        45
#> 3 2019-02-11 10:10:00      12        12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多