gpt4 book ai didi

r - 仅使用 R 为连续时间点创建滞后变量

转载 作者:行者123 更新时间:2023-12-02 18:18:43 27 4
gpt4 key购买 nike

我有一个不平衡的面板(测量点间隔不等),并且想按组创建一个 x 的滞后变量(变量:id),但仅限于连续的时间点。我的数据如下所示:

# simple example with an unbalanced panel
base <- data.frame(id = rep(1:2, each = 7),
time = c(1, 2, 3, 4, 7, 8, 10, 3, 4, 6, 9, 10, 11, 14),
x = rnorm(14, mean = 3, sd = 1))

我已经使用 dplyr 尝试过此代码:

base_lag <- base %>% # Add lagged column
group_by(id) %>%
dplyr::mutate(lag1_x = dplyr::lag(x, n = 1, default = NA)) %>%
as.data.frame()
base_lag # Print updated data

但是,通过这种方式,我得到了一个滞后变量,无论在某些情况下它不是两个连续的时间点。

我的最终数据集应如下所示:

   id time        x   lag1_x
1 1 1 3.437416 NA
2 1 2 2.300553 3.437416
3 1 3 2.374212 2.300553
4 1 4 4.374009 2.374212
5 1 7 1.177433 NA
6 1 8 1.543353 1.177433
7 1 10 3.222358 NA
8 2 3 3.763765 NA
9 2 4 3.881182 3.763765
10 2 6 4.754420 NA
11 2 9 4.518227 NA
12 2 10 2.512486 4.518227
13 2 11 3.129230 2.512486
14 2 14 2.152509 NA

这里有人可以给我一些关于如何创建这个滞后变量的提示吗?非常感谢!

最佳答案

您可以使用ifelse,测试diff(time)是否等于1。如果是,则写出滞后。如果没有,请写一个 NA

base %>%
group_by(id) %>%
mutate(lag1_x = ifelse(c(0, diff(time)) == 1, lag(x, n = 1, default = NA), NA)) %>%
as.data.frame()
#> id time x lag1_x
#> 1 1 1 1.852343 NA
#> 2 1 2 2.710538 1.852343
#> 3 1 3 2.700785 2.710538
#> 4 1 4 2.588489 2.700785
#> 5 1 7 3.252223 NA
#> 6 1 8 2.108079 3.252223
#> 7 1 10 3.435683 NA
#> 8 2 3 1.762462 NA
#> 9 2 4 2.775732 1.762462
#> 10 2 6 3.377396 NA
#> 11 2 9 3.133336 NA
#> 12 2 10 3.804190 3.133336
#> 13 2 11 2.942893 3.804190
#> 14 2 14 3.503608 NA

关于r - 仅使用 R 为连续时间点创建滞后变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71161401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com