尝试这种方法:
library(tidyverse)
df1 <- structure(list(
Name = c("A", "B", "C", "D"),
Value = c(2L, 5L,
3L, 2L)
),
class = "data.frame",
row.names = c(NA,-4L))
df2 <- structure(
list(
Name = c("A", "B", "C", "D"),
`Rating 2016-06` = c(NA,
NA, NA, NA),
`Rating 2017-07` = c(NA, NA, NA, NA),
`Ratin g 2017-08` = c(NA,
NA, NA, NA),
`Rating 2017-09` = c(NA, NA, NA, NA),
`Rating 2017-10` = c(NA,
NA, NA, NA),
`Rating 2017-11` = c(NA, NA, NA, NA),
`Rating 2017-12` = c(NA,
NA, NA, NA),
`Rating 2018-01` = c(4L, 4L, 3L, 3L),
`Rating 2018-02` = c(3L,
4L, 3L, 2L)), class = "data.frame", row.names = c(NA, -4L))
df2 |>
left_join(df1) |>
mutate(across(contains("2016") | contains("2017"), ~ Value)) |>
select(- Value)
#> Joining, by = "Name"
#> Name Rating 2016-06 Rating 2017-07 Ratin g 2017-08 Rating 2017-09
#> 1 A 2 2 2 2
#> 2 B 5 5 5 5
#> 3 C 3 3 3 3
#> 4 D 2 2 2 2
#> Rating 2017-10 Rating 2017-11 Rating 2017-12 Rating 2018-01 Rating 2018-02
#> 1 2 2 2 4 3
#> 2 5 5 5 4 4
#> 3 3 3 3 3 3
#> 4 2 2 2 3 2
df2 |>
left_join(df1) |>
mutate(across(`Rating 2016-06`:`Rating 2017-12`, ~ Value)) |>
select(- Value)
#> Joining, by = "Name"
#> Name Rating 2016-06 Rating 2017-07 Ratin g 2017-08 Rating 2017-09
#> 1 A 2 2 2 2
#> 2 B 5 5 5 5
#> 3 C 3 3 3 3
#> 4 D 2 2 2 2
#> Rating 2017-10 Rating 2017-11 Rating 2017-12 Rating 2018-01 Rating 2018-02
#> 1 2 2 2 4 3
#> 2 5 5 5 4 4
#> 3 3 3 3 3 3
#> 4 2 2 2 3 2
创建于2022-04-30由
reprex package
(v2.0.1)