我目前有一个如下所示的数据集:
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
我已尝试按不同的方式进行分组,但是我没有那么多的分组而是我想要设置起始年的序列集。
我知道它不是代码诊断问题,而是代码词汇问题。
答案 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