使用 R,对于每一年,我需要对相同的两个日期之间不同年份的销售额求和

Met*_*fan 4 r dplyr

对于两个不同的年份,对于每一年,我需要对 1 月 3 日到 3 月 3 日发生的所有销售额求和。我更喜欢 dplyr 解决方案。

我在 stackoverflow 中查看的所有可能的解决方案都使用 SQL,而不是 R。如果有人知道我错过的解决方案,请告诉我。

在 R 中,我知道如何与组合作并使用各种 dplyr 函数,但我需要帮助来完成本文的内容。

我希望输出看起来像这样:

Year   Total Sales
2020   138 
2021   196
Run Code Online (Sandbox Code Playgroud)

输入

df <- data.frame(date=c(20200102, 20200107, 20200210, 20200215, 20200216, 20200302, 20200305, 20210101, 20210104, 20210209, 20210211, 20210215, 20210317, 20210322),
                  sales=c(9,14,27,30,33,34,36,44,45,47,51,53,56,58))
Run Code Online (Sandbox Code Playgroud)

Tar*_*Jae 5

比我的 akrun 大师的解决方案少一行:)

  1. 具有封装转换字符类型ymd的功能。lubridate
  2. 使用DayMonth函数仅考虑月份和日期以获取所需的月份和日期间隔
  3. 通过...分组year
  4. 过滤区间
  5. 总结
library(lubridate)
df %>% 
    mutate(date = ymd(date)) %>% 
    mutate(DayMonth = format(as.Date(date), "%m-%d")) %>% 
    group_by(Year=year(date)) %>% 
    filter(DayMonth>"01-03" & DayMonth<"03-03") %>% 
    summarise(Total_Sales = sum(sales))
Run Code Online (Sandbox Code Playgroud)

输出:

   Year Total_Sales
  <int>       <dbl>
1  2020         138
2  2021         196
Run Code Online (Sandbox Code Playgroud)

  • 亲爱的@TarJae,您可以进一步缩短至少一行, `df %&gt;% group_by(Year =year(ymd(date))) %&gt;% mutate(DayMonth = format(ymd(date), "% m-%d")) %&gt;% 过滤器(DayMonth &gt; "01-03" &amp; DayMonth &lt; "03-03") %&gt;% 总结(Total_Sales = sum(sales))` (2认同)