级联降低了价格

时间:2017-10-06 05:14:02

标签: r dplyr

我目前有一个如下所示的数据集:

library(tidyverse)
tribble(~urn, ~year, ~retained, ~retained_years,
        1, 2010, 0, 0,
        1, 2011, 1, 1,
        1, 2012, 1, 2,
        1, 2013, 1, 3,
        1, 2014, 1, 4,
        2, 2010, 0, 0,
        2, 2011, 1, 1,
        2, 2013, 0, 0,
        2, 2014, 1, 1)

# # A tibble: 9 x 4
#     urn  year retained retained_years
#   <dbl> <dbl>    <dbl>          <dbl>
# 1     1  2010        0              0
# 2     1  2011        1              1
# 3     1  2012        1              2
# 4     1  2013        1              3
# 5     1  2014        1              4
# 6     2  2010        0              0
# 7     2  2011        1              1
# 8     2  2013        0              0
# 9     2  2014        1              1

我想要使用dplyr添加一个列,该列创建一个新列ret_year_start,该列填充一组记录的最小年份,其中retained = 1的值。结果将类似于以下数据集。

# # A tibble: 9 x 5
#     urn  year retained retained_years ret_year_start
#   <dbl> <dbl>    <dbl>          <dbl>          <dbl>
# 1     1  2010        0              0             NA
# 2     1  2011        1              1           2011
# 3     1  2012        1              2           2011
# 4     1  2013        1              3           2011
# 5     1  2014        1              4           2011
# 6     2  2010        0              0             NA
# 7     2  2011        1              1           2011
# 8     2  2013        0              0             NA
# 9     2  2014        1              1           2014

我已尝试按不同的方式进行分组,但是我没有那么多的分组而是我想要设置起始年的序列集。

我知道它不是代码诊断问题,而是代码词汇问题。

1 个答案:

答案 0 :(得分:1)

我们按照&#39; run&#39;以及&#39;保留&#39;中的游程ID(来自rleid的{​​{1}},并获得与保留的第一个元素位置对应的&#39;年份&#39; 1

data.table

library(dplyr) library(data.table) df1 %>% group_by(urn, grp = rleid(retained)) %>% mutate(ret_year_start = year[which(retained==1)[1]]) # A tibble: 9 x 6 # Groups: urn, grp [6] # urn year retained retained_years grp ret_year_start # <dbl> <dbl> <dbl> <dbl> <int> <dbl> #1 1 2010 0 0 1 NA #2 1 2011 1 1 2 2011 #3 1 2012 1 2 2 2011 #4 1 2013 1 3 2 2011 #5 1 2014 1 4 2 2011 #6 2 2010 0 0 3 NA #7 2 2011 1 1 4 2011 #8 2 2013 0 0 5 NA #9 2 2014 1 1 6 2014

data.table