【问题标题】:Calculate cumulative sum over time stamp with dplyr使用 dplyr 计算时间戳上的累积总和
【发布时间】:2021-06-18 18:35:36
【问题描述】:

我正在尝试计算一段时间内的累积总和。有没有办法在一步内计算出来?有什么包推荐吗?

activate_2019 <- activate_rate %>% 
  filter(
    grepl("2019", join_day)
  ) %>% 
  summarize(
    proportion = sum(if_activate) /n()
  ) 
activate_2020 <- activate_rate %>% 
  filter(
    grepl("2019|2020", join_day)
  ) %>% 
  summarize(
    proportion = sum(if_activate) /n()
  ) 
activate_2021 <- activate_rate %>% 
  filter(
    grepl("2019|2020|2021", join_day)
  ) %>% 
  summarize(
    proportion = sum(if_activate) /n()
  ) 

【问题讨论】:

  • 旁注:sum(if_activate) /n() 可能等于mean(if_activate)
  • 您的数据是什么样的?您能否以我们可以运行的代码形式包含一个具有代表性的示例?
  • 欢迎来到 SO,suzmiu!这个问题是一个好的开始,但如果我们有样本数据可以使用它真的很有帮助。请粘贴来自dput(x) 的输出,其中xactivate_rate 的代表但不是很大的样本。谢谢!

标签: r dplyr tidyverse


【解决方案1】:

这是tidyverse的一种方法

  1. 从“join_day”列中提取unique year`
  2. 循环遍历那些 slice active_rate 中的行,基于匹配 'join_day' 中循环的 'year'
  3. 通过“if_activate”的mean 进行总结
  4. 将输出与_dfc 绑定,即map 中的列绑定
library(stringr)
library(dplyr)
library(purrr)
un1 <- str_extract_all(activate_rate$join_day, "\\d{4}") %>%
    unlist %>%
    unique %>%
    as.integer %>%
    sort

map_dfc(un1, ~ activate_rate %>%
              arrange(as.Date(join_day)) %>%
              slice(seq(max(grep(as.character(.x), join_day)))) %>%
              sumarise(!!str_c("proportion", .x) := mean(if_activate)))

【讨论】:

    【解决方案2】:

    如果我理解正确,这应该可以解决问题:

    activate_rate %>% 
      mutate(year = floor_date(join_day, unit = "year")) %>% 
      group_by(year) %>% 
      summarise(proportion = sum(if_activate) / n())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多