gpt4 book ai didi

R 计算每周值的年同比变化(有额外的复杂性)

转载 作者:行者123 更新时间:2023-12-01 13:12:02 25 4
gpt4 key购买 nike

我有一个每日值(value)的数据集。时间跨度为 2018 年 12 月 1 日至 2020 年 4 月 1 日。

列是“日期”和“值”。如下所示:

date <- c("2018-12-01","2000-12-02", "2000-12-03",
...
"2020-03-30","2020-03-31","2020-04-01")

value <- c(1592,1825,1769,1909,2022, .... 2287,2169,2366,2001,2087,2099,2258)

df <- data.frame(date,value)

我想做的是按周对值求和,然后计算从当前年份到上一年的周环比变化。

我知道我可以使用以下函数按周求和:

Data_week <-  df%>% group_by(category ,week = cut(date, "week")) %>% mutate(summed= sum(value))

我的问题有两个:

1) 我如何按周求和然后操作数据框,以便我可以计算每周的变化(例如 2019 年 12 月 1 日周/2018 年 12 月 1 日周)。

2) 我怎样才能在上面做到这一点,但使用“定制”周。假设我想将一周定义为从我有数据的最新日期向后移动 7 天。例如。最近一周我会是从 3 月 26 日开始的一周(4 月 1 日 -7 天)。

最佳答案

我们可以使用 dplyr 中的 lag 来提供帮助,也可以使用 lubridate 中的一些便利函数。

library(dplyr)
library(lubridate)
df %>%
mutate(year = year(date)) %>%
group_by(week = week(date),year) %>%
summarize(summed = sum(value)) %>%
arrange(year, week) %>%
ungroup %>%
mutate(change = summed - lag(summed))
# week year summed change
# <dbl> <dbl> <dbl> <dbl>
# 1 48 2018 3638. NA
# 2 49 2018 15316. 11678.
# 3 50 2018 13283. -2033.
# 4 51 2018 15166. 1883.
# 5 52 2018 12885. -2281.
# 6 53 2018 1982. -10903.
# 7 1 2019 14177. 12195.
# 8 2 2019 14969. 791.
# 9 3 2019 14554. -415.
#10 4 2019 12850. -1704.
#11 5 2019 1907. -10943.

如果您想以不同的方式定义“周”,还有 isoweekepiweek。看这个answer以获得对您的选择的很好解释。

数据

set.seed(1)
df <- data.frame(date = seq.Date(from = as.Date("2018-12-01"), to = as.Date("2019-01-29"), "days"), value = runif(60,1500,2500))

关于R 计算每周值的年同比变化(有额外的复杂性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60997498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com