【问题标题】:R: Aggregating Data for Previous 30 DaysR:聚合前 30 天的数据
【发布时间】:2020-01-20 23:03:20
【问题描述】:

作为一个新手,我希望了解如何使用任意回顾(例如,从某个日期开始的前 30 天)来聚合数据。下面以我的数据为例。我想按每个名称分组,并计算 2019 年 2 月 15 日之前 30 天的销售额。所以它会从 2019 年 2 月 15 日回顾 30 个日历日,并按姓名给我总销售额(例如,第 1 个人 = 60 美元;第 2 个人 = 30 美元)

 Name      Date          Sales
Person1    01-31-2019    $10
Person1    02-15-2019    $50
Person1    06-18-2019    $100
Person2    01-31-2019    $25
Person2    02-15-2019    $5
Person2    06-18-2019    $200

【问题讨论】:

  • 所以将数据子集到 2019 年 2 月 15 日至 30 日之间?在您的数据上调用 dput 的输出会更有帮助,因为这将给出您实际使用的任何格式的日期,以及销售额(如果它实际上是数字)(即没有附加 $给它)
  • 您是指所有行的“截至 02-15-2019”,还是每行的 Date 前 30 天?

标签: r date aggregate lookback


【解决方案1】:

简单示例(如果我正确理解了您的问题):

library(dplyr) 
set.seed(123)
df <- data.frame(Name = sample(c("Person1", "Person2"), 6, T),
           Date = c("01-31-2019", "02-15-2019", "06-18-2019", "01-31-2019", "02-15-2019", "06-18-2019"),
           Sales = runif(6, 10, 100), stringsAsFactors = F)

df$Date <- lubridate::mdy(df$Date)

target <- lubridate::mdy("02-15-2019")
sales <- df %>% filter(between(Date, target - 30, target)) %>% 
  group_by(Name) %>% summarise(Sales = sum(Sales))

【讨论】:

  • 这看起来可行。我使用您的示例对其进行了测试,它似乎做了正确的事情。一个快速的问题,当使用 filter(between(Date, target - 30, target)) 时,它是按记录/行执行目标 - 30 还是按日历日期执行。理想情况下,即使没有值,我也想设置任意截止值。因此,例如,我想要从 2019 年 2 月 15 日开始的 30 个日历日。
  • @KevS 它按日历日期完成
【解决方案2】:

从订单中选择名称,sum(sales) 在哪里 DATEDIFF(day,OrderDate,GETDATE()) 介于 0 和 30 之间 按名称分组

【讨论】:

  • 这看起来像 SQL,但 OP 询问了 R
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2022-12-07
  • 1970-01-01
  • 2019-01-29
  • 2015-06-28
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多