R:计算每日值的月平均值
R: Compute monthly averages for daily values
我有以下数据在 R 中存储为 data.frame:
Daily value of product A, B and C from 2018-08-01 until 2019-12-31
现在我想计算每个产品的每月平均价值。此外,只应使用工作日的数据而不是周末的数据来计算每个产品的月平均值。 R 中获取所需数据的方法是什么?
这是一个解决方案,使用 dplyr
和 tidyr
:
df <- data.frame(Product = c("A", "B", "C"), "Value_2018-08-01" = c(120L, 100L, 90L),
"Value_2018-08-02" = c(80L, 140L, 20L), "Value_2018-08-03" = c(50L, 70L, 200L),
"Value_2018-12-31" = c(50L, 24L, 24L), "Value_2019-01-01" = c(44L, 60L, 29L),
"Value_2019-12-31" = c(99L, 49L, 49L))
df %>%
tidyr::pivot_longer(c(starts_with("Value"))) %>%
mutate(Date = name,
Date = sub(".*_", "", Date),
Date = as.Date(Date, format="%Y.%m.%d"),
weekday = weekdays(Date)) %>%
filter(!weekday %in% c("Samstag", "Sonntag")) %>%
group_by(Product, format(Date, "%m")) %>%
summarize(mean(value)) %>%
as.data.frame()
Product format(Date, "%m") mean(value)
1 A 01 44.00000
2 A 08 83.33333
3 A 12 74.50000
4 B 01 60.00000
5 B 08 103.33333
6 B 12 36.50000
7 C 01 29.00000
8 C 08 103.33333
9 C 12 36.50000
请注意,Samstag 和 Sonntag 应更改为您工作系统语言的周末名称。
此外,我已经按照您的要求计算了月平均值。但是,如果你想获得每年的月平均值,你应该将 group_by(Product, format(Date, "%m"))
更改为 group_by(Product, format(Date, "%m"),format(Date, "%Y")
)。
我有以下数据在 R 中存储为 data.frame: Daily value of product A, B and C from 2018-08-01 until 2019-12-31
现在我想计算每个产品的每月平均价值。此外,只应使用工作日的数据而不是周末的数据来计算每个产品的月平均值。 R 中获取所需数据的方法是什么?
这是一个解决方案,使用 dplyr
和 tidyr
:
df <- data.frame(Product = c("A", "B", "C"), "Value_2018-08-01" = c(120L, 100L, 90L),
"Value_2018-08-02" = c(80L, 140L, 20L), "Value_2018-08-03" = c(50L, 70L, 200L),
"Value_2018-12-31" = c(50L, 24L, 24L), "Value_2019-01-01" = c(44L, 60L, 29L),
"Value_2019-12-31" = c(99L, 49L, 49L))
df %>%
tidyr::pivot_longer(c(starts_with("Value"))) %>%
mutate(Date = name,
Date = sub(".*_", "", Date),
Date = as.Date(Date, format="%Y.%m.%d"),
weekday = weekdays(Date)) %>%
filter(!weekday %in% c("Samstag", "Sonntag")) %>%
group_by(Product, format(Date, "%m")) %>%
summarize(mean(value)) %>%
as.data.frame()
Product format(Date, "%m") mean(value)
1 A 01 44.00000
2 A 08 83.33333
3 A 12 74.50000
4 B 01 60.00000
5 B 08 103.33333
6 B 12 36.50000
7 C 01 29.00000
8 C 08 103.33333
9 C 12 36.50000
请注意,Samstag 和 Sonntag 应更改为您工作系统语言的周末名称。
此外,我已经按照您的要求计算了月平均值。但是,如果你想获得每年的月平均值,你应该将 group_by(Product, format(Date, "%m"))
更改为 group_by(Product, format(Date, "%m"),format(Date, "%Y")
)。