R 滞后于非连续指数

R 滞后于非连续指数,r,dplyr,R,Dplyr,我有缺少索引的数据,例如: df <- data.frame(year = c(2000:2004, 2006), value = c(0:4,6) ^ 2) # year value # 1 2000 0 # 2 2001 1 # 3 2002 4 # 4 2003 9 # 5 2004 16 # 6 2006 36 df% 变异(上一个=ifelse(总和(df$year==year)=1,df$value[df$year==year-

我有缺少索引的数据,例如:

df <- data.frame(year = c(2000:2004, 2006), value = c(0:4,6) ^ 2)
#   year value
# 1 2000     0
# 2 2001     1
# 3 2002     4
# 4 2003     9
# 5 2004    16
# 6 2006    36
df%
变异(上一个=ifelse(总和(df$year==year)=1,df$value[df$year==year-1],NA))
##tibble:6 x 3
##组别:年份[6]
#上一年度价值
#     
#120000 NA
# 2  2001  1.00  0   
# 3  2002  4.00  1.00
# 4  2003  9.00  4.00
# 5  2004 16.0   9.00
#6 2006 36.0 NA

这里有一个简单的方法:

mutate(df, prev = value[match(year - 1, year)])
#   year value prev
# 1 2000     0   NA
# 2 2001     1    0
# 3 2002     4    1
# 4 2003     9    4
# 5 2004    16    9
# 6 2006    36   NA
right <- df %>% group_by(year) %>% 
    mutate(prev = ifelse(sum(df$year == year) == 1, df$value[df$year == year-1], NA))
# # A tibble: 6 x 3
# # Groups: year [6]
#     year value  prev
#   <dbl> <dbl> <dbl>
# 1  2000  0    NA   
# 2  2001  1.00  0   
# 3  2002  4.00  1.00
# 4  2003  9.00  4.00
# 5  2004 16.0   9.00
# 6  2006 36.0  NA   
mutate(df, prev = value[match(year - 1, year)])
#   year value prev
# 1 2000     0   NA
# 2 2001     1    0
# 3 2002     4    1
# 4 2003     9    4
# 5 2004    16    9
# 6 2006    36   NA