对于R和dr:
library(dplyr)
tab1 <- tribble(
~code, ~periode, ~prix,
"a", "2023-01-01", 3,
"b", "2023-01-01", 2,
"c", "2023-02-01", 2,
"d", "2023-02-01", 4
)
tab2 <- tribble(
~code, ~`2018-01-01`, ~`2018-02-01`, ~`2019-01-01`, ~`2019-02-01`, ~`2020-01-01`,
~`2020-02-01`,~`2021-01-01`, ~`2021-02-01`, ~`2022-01-01`, ~`2022-02-01`,
"a", 2, 1, 2, 3, 3, 4, 1, 2, 2, 1,
"b", 1, 2, 4, 2, 1, 2, 1, 5, 1, 2,
"c", 2, 1, 5, 6, 1, 3, 4, 3, 1, 3,
"d", 3, 2, 7, 8, 6, 4, 5, 9, 7, 8
)
我想在tab1
中添加三个列N_1
、N_2
和N_3
,这样,例如,当tab 1中的periode为2023-01-01
时:
- N_1包含tab 2中的2022-01-01的值
- N_2包含tab 2中2021-01-01的值
- N_3包含表2中2020-01-01的值
这里有一个最小的可重复的例子,具有预期的结果:
# A tibble: 4 × 6
code periode prix N_1 N_2 N_3
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 a 2023-01-01 3 2 1 3
2 b 2023-01-01 2 1 1 1
3 c 2023-02-01 2 3 3 3
4 d 2023-02-01 4 8 9 4
在真实的表中,当然有每年的所有月份,这就是为什么找到要添加的正确列很重要。
我试过这样的方法:
result <- tab1 |>
group_by(periode) |>
mutate(N_1 = tab2[[""]]...
提前感谢!
2条答案
按热度按时间8fsztsew1#
看起来你要做的是将
tab2
旋转到更长的形式,过滤2020年到2022年,将它们重命名为N_1到N_3,然后将它们旋转回按月分组的宽形式。一旦我们有了它,我们就可以按月加入
tab1
。zzoitvuj2#
另一个解决方案是动态日期。关键是使用
seq.Date
生成当前日期前1年、2年和3年的日期: