【问题标题】:Dplyr - Time periods since first eventDplyr - 自第一个事件以来的时间段
【发布时间】:2018-07-10 22:14:46
【问题描述】:

提前感谢您的帮助。假设我有这个数据框。

# install.packages(c("tidyverse"), dependencies = TRUE)
require(tidyverse)
test <- tibble(id=c(1,1,1,2,2,2),
               event=c("dog","cat","mouse","cat","mouse","dog"),
               quarter=(c(1,5,8,4,5,9)))
test
#> # A tibble: 6 x 3
#>      id event quarter
#>   <dbl> <chr>   <dbl>
#> 1     1   dog       1
#> 2     1   cat       5
#> 3     1 mouse       8
#> 4     2   cat       4
#> 5     2 mouse       5
#> 6     2   dog       9

我想使用dplyr 来结束以下数据框,这样对于每个给定的id,我知道自第一个事件以来已经过去的quarters 的数量。

test %>% cbind(quarterFrom = c(0,5,8,0,1,5)) %>% as_tibble()
#> # A tibble: 6 x 4
#>      id event quarter quarterFrom
#>   <dbl> <chr>   <dbl>       <dbl>
#> 1     1   dog       1           0
#> 2     1   cat       5           5
#> 3     1 mouse       8           8
#> 4     2   cat       4           0
#> 5     2 mouse       5           1
#> 6     2   dog       9           5

您可以看到,对于id == 1,第一季度是1,它收到quarterFrom == 0。但是对于id == 2,第一季度是4,也应该收到quarterFrom == 0。从那时起给定id 的所有其他条目是自quarterFrom == 0 以来经过的季度数。

再次感谢。

【问题讨论】:

  • 您的输出不一致。例如,第 2 行是否应该为 Quarter=5,QuarterFrom=4?
  • 嘿 - 对计数混乱感到抱歉!谢谢@Eric Fail

标签: r dplyr


【解决方案1】:

我意识到我的计数与你的有点不同,但这仅仅是因为我没有 100% 遵循你的逻辑。也许你可以澄清一下,我可以更新回应。

test %>% group_by(id) %>% mutate(quarterFrom = quarter- first(quarter))
#> # A tibble: 6 x 4
#> # Groups:   id [2]
#>      id  event quarter quarterFrom
#>   <dbl> <fctr>   <dbl>       <dbl>
#> 1     1    dog       1           0
#> 2     1    cat       5           4
#> 3     1  mouse       8           7
#> 4     2    cat       4           0
#> 5     2  mouse       5           1
#> 6     2    dog       9           5

网站有further illustrative examples of how to extract the first, last or nth value from a vector

我刚刚看到thc 发布了一个或多或少相同的解决方案。我认为这个答案也很好——显然他是——还是她? – 也被计数弄糊涂了。

【讨论】:

    【解决方案2】:

    我认为您的示例输出在 id=1 或 id=2 中有一个错误。如果是这样,您可以通过在此 dplyr 解决方案中加减 1 来进行调整:

    test %>% group_by(id) %>% mutate(quarterFrom = quarter-min(quarter))
    
         id  event quarter quarterFrom
      <dbl> <fctr>   <dbl>       <dbl>
    1     1    dog       1           0
    2     1    cat       5           4
    3     1  mouse       8           7
    4     2    cat       4           0
    5     2  mouse       5           1
    6     2    dog       9           5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多