【问题标题】:lagging a variable taking into account year and id [duplicate]考虑到年份和 id 滞后变量[重复]
【发布时间】:2018-12-16 21:04:18
【问题描述】:

我有以下不平衡数据集:

id Year A
1  1    5
1  2    6
2  1    11
2  2    12
2  3    13
3  2    1
3  3    3

我想要一个变量 lagA 真正考虑到每个观察的年份和 id 而不仅仅是向下移动列:

id Year A   lagA
1  1    5   NA
1  2    6   5
2  1    11  NA
2  2    12  11
2  3    13  12
3  2    1   NA
3  3    3   1

有什么想法吗?我尝试确保数据框是 pf 类 pdata.frame,但是当我使用函数 lag(A,1) 时,它只会将列向下移动,从而产生不一致的结果。

【问题讨论】:

    标签: r dataframe longitudinal


    【解决方案1】:

    我们需要按 'id' 分组,然后执行lag

    library(dplyr)
    df1 %>%
         arrange(id, Year) %>% # in case not ordered by 'year'
         group_by(id) %>%
         mutate(lagA = lag(A))
    # A tibble: 7 x 4
    # Groups:   id [3]
    #     id  Year     A  lagA
    #  <int> <int> <int> <int>
    #1     1     1     5    NA
    #2     1     2     6     5
    #3     2     1    11    NA
    #4     2     2    12    11
    #5     2     3    13    12
    #6     3     2     1    NA
    #7     3     3     3     1
    

    【讨论】:

    • 我试图避免加载外部包,但以下stats::lag 不起作用:ave(df1$A, df1$id, FUN = dplyr::lag)
    • @RuiBarradas 您可以附加NA 并删除ave 中的最后一个观察值with(df1, ave(A, id, FUN = function(x) c(NA, x[-length(x)])))
    • 可以,不过上面的比较简单。
    • @RuiBarradas 不清楚为什么stats::lag 的输出是stats::lag(1:5)# [1] 1 2 3 4 5 是一样的。可能它需要一个时间序列对象
    • 唯一的区别是tsp 属性。例如,尝试stats::lag(1:5, k = 2)
    猜你喜欢
    • 2020-07-26
    • 2022-06-28
    • 2021-03-30
    • 2014-06-30
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多