使用R和dplyr:
我想在tab1中添加三列N_1、N_2和N_3,例如,当tab1中的periode为2023-01-01时:
- N_1包含tab2中2022-01-01的值 - N_2包含tab2中2021-01-01的值 - N_3包含tab2中2020-01-01的值
以下是一个最小可复现示例及预期结果:
在实际表格中,当然会包含每年的所有月份,这就是为什么找到正确的列进行相加非常重要。
我尝试了类似这样的方法:
非常感谢您的提前帮助!
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,例如,当tab1中的periode为2023-01-01时:
- N_1包含tab2中2022-01-01的值 - N_2包含tab2中2021-01-01的值 - N_3包含tab2中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[[""]]...
非常感谢您的提前帮助!
left_join(tab1, tab2)
基本上可以达到你的目的。你只需要使用rename()
函数来重命名列,并且如果有必要的话,重新排列它们,因为tab2
中的列顺序与你期望的结果相反。 - undefined