我希望构造一个变量,为每个ID/year组合分配一个ID值,以便新变量计算时间段,而不是简单地列出年份。
这就是我想要的:
<表类>
id
年
time_period
tbody><<tr>1 2001 1 12002 2 12004 3 22005 1 22006 2 3 2002 1 3 2005 2 42004 1 42008 2 42009 3 42011 4 表类>
解决方案是仅按id分组,然后创建序列,如果您可以将年份转换为factor
,然后转换为整数/数字:
df %>%
group_by(id) %>%
mutate(time_period_factor = as.integer(factor(year, levels = sort(unique(year)))))
# A tibble: 12 x 4
# Groups: id [4]
# id year time_period time_period_factor
# <dbl> <dbl> <dbl> <int>
# 1 1 2001 1 1
# 2 1 2002 2 2
# 3 1 2004 3 3
# 4 2 2005 1 1
# 5 2 2006 2 2
# 6 3 2002 1 1
# 7 3 2005 2 2
# 8 4 2004 1 1
# 9 4 2008 2 2
#10 4 2009 3 3
#11 4 2011 4 4
#12 4 2009 3 3
一个站点重复年份的新数据
df <- structure(list(id = c(1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4,4), year = c(2001,
2002, 2004, 2005, 2006, 2002, 2005, 2004, 2008, 2009, 2011,2009),
time_period = c(1, 2, 3, 1, 2, 1, 2, 1, 2, 3, 4,3)), class = "data.frame", row.names = c(NA,
-12L))