为r中两个条件分组的几个列创建滞后变量

xnifntxz  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(131)

我想创建滞后变量的几列是由两个条件分组。
以下是数据集:

df <- data.frame(id = c(rep(1,4),rep(2,4)), tp = rep(1:4,2), x1 = 1:8, x2 = 2:9, x3 = 3:10, x4 = 4:11)
> df
  id tp x1 x2 x3 x4
1  1  1  1  2  3  4
2  1  2  2  3  4  5
3  1  3  3  4  5  6
4  1  4  4  5  6  7
5  2  1  5  6  7  8
6  2  2  6  7  8  9
7  2  3  7  8  9 10
8  2  4  8  9 10 11

我想延迟x1, x2, x3, x4,它们被idtp分组,并创建新变量x1_lag1, x2_lag1, x3_lag1, x4_lag1,如下所示:

> df
  id tp x1 x2 x3 x4  x1_lag1 x2_lag1 x3_lag1 x4_lag1
1  1  1  1  2  3  4     2       3       4       5
2  1  2  2  3  4  5     3       4       5       6
3  1  3  3  4  5  6     4       5       6       7
4  1  4  4  5  6  7     NA      NA      NA      NA
5  2  1  5  6  7  8     6       7       8       9
6  2  2  6  7  8  9     7       8       9       10
7  2  3  7  8  9 10     8       9       10      11
8  2  4  8  9 10 11     NA      NA      NA      NA

如何做到这一点?

sr4lhrrt

sr4lhrrt1#

您的结果似乎根本没有按tp分组。它按id分组,并在id分组中按tp排序。
一般来说,“lag”是一个从上一行取值的变量,而你想标记为“lag”的列则从下一行取值,所以我们使用lead函数。

library(dplyr)
df %>%
  group_by(id) %>%
  mutate(across(starts_with("x"), lead, .names = "{.col}_lag1")) %>%
  ungroup()
# A tibble: 8 × 10
     id    tp    x1    x2    x3    x4 x1_lag1 x2_lag1 x3_lag1 x4_lag1
  <dbl> <int> <int> <int> <int> <int>   <int>   <int>   <int>   <int>
1     1     1     1     2     3     4       2       3       4       5
2     1     2     2     3     4     5       3       4       5       6
3     1     3     3     4     5     6       4       5       6       7
4     1     4     4     5     6     7      NA      NA      NA      NA
5     2     1     5     6     7     8       6       7       8       9
6     2     2     6     7     8     9       7       8       9      10
7     2     3     7     8     9    10       8       9      10      11
8     2     4     8     9    10    11      NA      NA      NA      NA

相关问题