【问题标题】:Lubridate; Dplyr how to aggregate a dataframe by week and category润滑; Dplyr 如何按周和类别聚合数据框
【发布时间】:2020-06-09 02:45:59
【问题描述】:

考虑以下示例

library(dplyr)
library(lubridate)

time <- seq(from =ymd("2014-01-01"),to= ymd("2014-02-20"), by="days")
values <- sample(seq(from = 20, to = 50, by = 5), size = length(time), replace = TRUE)
tipe <- sample(rep(x = c("Tipe_A", "Tipe_B", "Tipe_C")), size = length(time), replace = TRUE)

df2 <- data_frame(time, tipe, values)

# A tibble: 51 x 3
   time       tipe   values
   <date>     <chr>   <dbl>
 1 2014-01-01 Tipe_B     40
 2 2014-01-02 Tipe_B     30
 3 2014-01-03 Tipe_A     35
 4 2014-01-04 Tipe_A     50
 5 2014-01-05 Tipe_B     35
 6 2014-01-06 Tipe_B     50
 7 2014-01-07 Tipe_A     50
 8 2014-01-08 Tipe_B     40
 9 2014-01-09 Tipe_A     30
10 2014-01-10 Tipe_B     25
# ... with 41 more rows

我想计算值之间的差异,并按周和小费汇总此数据帧。

我只能按类型来做

df2 %>%
  filter(tipe == "Tipe_A") %>%
  mutate(diff = values - lag(values, order_by = time)) %>%
  group_by(week = week(time)) %>%
  summarise(avr = mean(diff, na.rm = T))

# A tibble: 7 x 2
   week    avr
  <dbl>  <dbl>
1     1   7.5 
2     2 -20   
3     3   3.33
4     5   0   
5     6  -3.33
6     7 -10   
7     8  25

但是我有很多类型,所以这将是一个乏味的过程。

有没有办法让每种类型都更高效?

【问题讨论】:

  • 我猜你需要df2 %&gt;% group_by(tipe) %&gt;% mutate(..

标签: r dplyr lubridate


【解决方案1】:

在这里,我们可能需要先按'tipe'进行分组,然后计算'diff',在我们得到summarise中的mean之前添加'week'作为分组列

library(dplyr)
df2 %>%
   group_by(tipe) %>% 
   mutate(diff = values - lag(values, order_by = time)) %>%
   group_by(week = week(time), .add = TRUE) %>%
   summarise(avr = mean(diff, na.rm = TRUE))

或者先arrange

df2 %>%
   arrange(tipe, time) %>% 
   group_by(tipe) %>% 
   mutate(diff = values - lag(values)) %>%
   group_by(week = week(time), .add = TRUE) %>%
   summarise(avr = mean(diff, na.rm = TRUE))

【讨论】:

  • 我采纳了您的建议并添加了group_by(week = week(time), tipe) %&gt;%,起初我认为“滞后”功能使用错误的周数/类型会有问题。但它完美无缺。谢谢
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2021-01-15
相关资源
最近更新 更多