gpt4 book ai didi

r - dplyr,lubridate:如何按周汇总数据帧?

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

考虑下面的例子

library(tidyverse)
library(lubridate)
time <- seq(from =ymd("2014-02-24"),to= ymd("2014-03-20"), by="days")
set.seed(123)
values <- sample(seq(from = 20, to = 50, by = 5), size = length(time), replace = TRUE)
df2 <- data_frame(time, values)
df2 <- df2 %>% mutate(day_of_week = wday(time, label = TRUE))

Source: local data frame [25 x 3]

time values day_of_week
<date> <dbl> <fctr>
1 2014-02-24 30 Mon
2 2014-02-25 45 Tues
3 2014-02-26 30 Wed
4 2014-02-27 50 Thurs
5 2014-02-28 50 Fri
6 2014-03-01 20 Sat
7 2014-03-02 35 Sun
8 2014-03-03 50 Mon
9 2014-03-04 35 Tues
10 2014-03-05 35 Wed

我想按周汇总此数据帧

也就是说,假设我将一周定义为从星期一早上开始到星期日晚上结束,我们将其称为Monday to Monday周期。 (重要的是,我希望能够选择其他约定,例如星期五至星期五)。

然后,我只想计算每周values的平均值。

例如,在上面的示例中,将计算2月24日星期一至3月2日星期日之间values的平均值,依此类推。

我怎样才能做到这一点?

谢谢!

编辑:感谢所有提出想法的人。有点不寻常,我认为我较晚的解决方案在这里可能更合适。再次感谢!

最佳答案

在tidyverse中,

df2 %>% group_by(week = week(time)) %>% summarise(value = mean(values))

## # A tibble: 5 × 2
## week value
## <dbl> <dbl>
## 1 8 37.50000
## 2 9 38.57143
## 3 10 38.57143
## 4 11 36.42857
## 5 12 45.00000

或改用 isoweek:
df2 %>% group_by(week = isoweek(time)) %>% summarise(value = mean(values))

## # A tibble: 4 × 2
## week value
## <int> <dbl>
## 1 9 37.14286
## 2 10 40.71429
## 3 11 35.00000
## 4 12 42.50000

cut.Date:
df2 %>% group_by(week = cut(time, "week")) %>% summarise(value = mean(values))

## # A tibble: 4 × 2
## week value
## <fctr> <dbl>
## 1 2014-02-24 37.14286
## 2 2014-03-03 40.71429
## 3 2014-03-10 35.00000
## 4 2014-03-17 42.50000

如果您愿意,可以告诉您从星期日开始
df2 %>% group_by(week = cut(time, "week", start.on.monday = FALSE)) %>% 
summarise(value = mean(values))

## # A tibble: 4 × 2
## week value
## <fctr> <dbl>
## 1 2014-02-23 37.50000
## 2 2014-03-02 40.00000
## 3 2014-03-09 33.57143
## 4 2014-03-16 44.00000

如果您想转到星期二开始,请在日期中添加一个:
df2 %>% group_by(week = cut(time + 1, "week")) %>% summarise(value = mean(values))

## # A tibble: 4 × 2
## week value
## <fctr> <dbl>
## 1 2014-02-24 37.50000
## 2 2014-03-03 40.00000
## 3 2014-03-10 33.57143
## 4 2014-03-17 44.00000

不过,标签将关闭。如果使用 cut,请考虑其在 include.lowest中记录的 right?cut参数的含义。

关于r - dplyr,lubridate:如何按周汇总数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554231/

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