【发布时间】:2023-02-10 20:26:32
【问题描述】:
我想将一个值滞后于两个具有
这是数据:
df <- data.frame(wave = c(16, 20, 20, 36, 40, 40),
area = c(1,1,1,1,1,1),
party = c("A", "A", "A", "B", "B", "B"),
loyal = c(NA, 0, 1, NA, 0, 1),
ipref_1 = c(0.25, 0.25, 0.5, -0.25, 0.5, -0.25),
ipref_2 = c(0.5, 0.25, -0.25, -0.75, 0.5, -0.25),
ipref_3 = c(-0.5, -0.25, 0, 0.5, -0.25, 0))
看起来像:
wave area party loyal ipref_1 ipref_2 ipref_3
16 1 A NA 0.25 0.50 -0.50
20 1 A 0 0.25 0.25 -0.25
20 1 A 1 0.50 -0.25 0.00
36 1 B NA -0.25 -0.75 0.50
40 1 B 0 0.50 0.50 -0.25
40 1 B 1 -0.25 -0.25 0.00
我想将第 16 波和第 36 波的 ipref_1、ipref_2 和 ipref_3 分别滞后于第 20 波和第 40 波。但是,在后面的波浪中有一个额外的变量loyal,分数为0和1。我想将波 16(和 36)的值滞后于波 20(和 40)的两行。
我试过:
df <- df %>% group_by(party, area) %>%
mutate(l_ipref_1 = lag(ipref_1, 1, order_by = wave, na.rm =T),
l_ipref_2 = lag(ipref_2, 1, order_by = wave, na.rm =T),
l_ipref_3 = lag(ipref_3, 1, order_by = wave, na.rm =T))
但它给了我:
wave area party loyal ipref_1 ipref_2 ipref_3 l_ipref_1 l_ipref_2 l_ipref_3
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
16 1 A NA 0.25 0.5 -0.5 NA NA NA
20 1 A 0 0.25 0.25 -0.25 0.25 0.5 -0.5
20 1 A 1 0.5 -0.25 0 0.25 0.25 -0.25
36 1 B NA -0.25 -0.75 0.5 NA NA NA
40 1 B 0 0.5 0.5 -0.25 -0.25 -0.75 0.5
40 1 B 1 -0.25 -0.25 0 0.5 0.5 -0.25
在这里,在第 20 波(和第 40 波)中,loyal = 0 的得分落后于 loyal = 1,但我需要的是:
wave area party loyal ipref_1 ipref_2 ipref_3 l_ipref_1 l_ipref_2 l_ipref_3
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
16 1 A NA 0.25 0.5 -0.5 NA NA NA
20 1 A 0 0.25 0.25 -0.25 0.25 0.5 -0.5
20 1 A 1 0.5 -0.25 0 0.25 0.5 -0.5
36 1 B NA -0.25 -0.75 0.5 NA NA NA
40 1 B 0 0.5 0.5 -0.25 -0.25 -0.75 0.5
40 1 B 1 -0.25 -0.25 0 -0.25 -0.75 0.5
有什么建议么?非常感谢
【问题讨论】: