每位用户过去7天解决的问题数量的总和

Jas*_*ews 3 r dplyr

给定User_IdSolved_DateNumberOfQuestions为每个用户解决,如何获取过去7天(当前日期除外)的滚动总和。我使用for循环和遍历每个行来解决此问题,但是正在寻找一种替代方法并且易于阅读代码,例如使用dplyr

Input:
fread("
USER_ID SOLVED_DATE QUESTIONS_SOLVED
          1 2019-05-01        1
          1 2019-05-02        1
          2 2019-05-02        1
          2 2019-05-03        1
          2 2019-05-04        1
          2 2019-05-05        1
          1 2019-05-06        1
          2 2019-05-06        1
          1 2019-05-07        1
          2 2019-05-07        1
          1 2019-05-08        1
          2 2019-05-08        1
          1 2019-05-09        1
          1 2019-05-10        1
          1 2019-05-11        1
          2 2019-05-11        1
          2 2019-05-12        1
          2 2019-05-13        1
          2 2019-05-14        1
          2 2019-05-15        1
          1 2019-05-16        1")

OutPut:
USER_ID SOLVED_DATE NUMBER_QUESTIONS_SOLVED PAST_7DAY_SOLVED_HISTORY
           1 2019-05-01        1                       0
           1 2019-05-02        1                       1
           2 2019-05-02        1                       0
           2 2019-05-03        1                       1
           2 2019-05-04        1                       2
           1 2019-05-05        1                       2
           2 2019-05-05        1                       3
           1 2019-05-06        1                       3
           2 2019-05-06        1                       4
           1 2019-05-07        1                       4
           2 2019-05-07        1                       5
           1 2019-05-08        1                       4
           2 2019-05-08        1                       6
           1 2019-05-09        1                       4
           1 2019-05-10        1                       5
           1 2019-05-11        1                       6
           2 2019-05-11        1                       4
           2 2019-05-12        1                       4
           2 2019-05-13        1                       4
           2 2019-05-14        1                       4
           2 2019-05-15        1                       4
           1 2019-05-16        1                       2
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 6

我们可以先将其转换SOLVED_DATE为实际日期,然后使用map_dblfrom purrr来查找最近7天内解决了多少个问题。

library(dplyr)
library(purrr)

df %>%
  mutate(SOLVED_DATE = as.Date(SOLVED_DATE)) %>%
  group_by(USER_ID) %>%
  mutate(Order_History = map_dbl(SOLVED_DATE, 
        ~sum(QUESTIONS_SOLVED[(SOLVED_DATE > . - 7) & (SOLVED_DATE < .)])))

#   USER_ID SOLVED_DATE QUESTIONS_SOLVED Order_History
#     <int> <date>                 <int>         <dbl>
# 1       1 2019-05-01                 1             0
# 2       1 2019-05-02                 1             1
# 3       2 2019-05-02                 1             0
# 4       2 2019-05-03                 1             1
# 5       2 2019-05-04                 1             2
# 6       2 2019-05-05                 1             3
# 7       1 2019-05-06                 1             2
# 8       2 2019-05-06                 1             4
# 9       1 2019-05-07                 1             3
#10       2 2019-05-07                 1             5
# … with 11 more rows
Run Code Online (Sandbox Code Playgroud)

  • @JasonMathews这是一种公式样式表示方式,用于表示一个函数,您可以使用该函数用`.`引用参数。使用匿名函数,我们可以像`map_dbl(SOLVED_DATE,function(x)sum(QUESTIONS_SOLVED [(SOLVED_DATE&gt; x-7)&(SOLVED_DATE &lt;x)])那样做。 (3认同)