【问题标题】:Lags with nonconsecutive index不连续索引的滞后
【发布时间】:2019-04-29 16:56:28
【问题描述】:

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

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

我想计算每年的滞后值。如果我使用滞后功能,

library(dplyr)
wrong <- mutate(df, prev = lag(value, order_by = 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   16

尽管没有 2005 年的数据,但它给出了 2006 年的滞后值。我可以使用滞后函数获得上一年的值吗?

目前,我知道我可以执行以下操作,但效率低且混乱:

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   

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是一种简单的方法:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2017-11-24
      • 1970-01-01
      • 2016-09-13
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多