我有两个数据框。第一个名为first_df,第二个名为second_df。现在,我想将第二个数据框的数据更新到第一个数据框。
# First data frame
library(dplyr)
first_df <- data.frame(
ShortName = c("A", "B", "C"),
t1 = c(0, 0, 0 ),
t2 = c(1, 1, 1),
t3 = c(2, 2, 2),
t4 = c(3, 3, 3)
)
# Second data frame
second_df <- data.frame(
ShortName = c("A", "B", "C"),
Year = c(2024, 2025, 2026 ),
Value=c(0, 5, 10)
)
更新应使t1、t2、t3、t4列分别对应年份2024、2025、2026、2027。如果value参数中的年份是2026,则表示将应用该值从 2026 年开始,包括 2027 年。
最终,表格应如下图所示。
有人可以帮我用 dplyr 做到这一点吗?
我可能误解了,但这是一个可能的解决方案:
library(dplyr)
library(tidyr)
first_df <- data.frame(
ShortName = c("A", "B", "C"),
t1 = c(0, 0, 0 ),
t2 = c(1, 1, 1),
t3 = c(2, 2, 2),
t4 = c(3, 3, 3)
)
second_df <- data.frame(
ShortName = c("A", "B", "C"),
Year = c(2024, 2025, 2026 ),
Value=c(0, 5, 10)
)
first_df %>%
pivot_longer(-ShortName,
names_to = "timepoint",
values_to = "original_value") %>%
mutate(original_year = 2023 + row_number(), .by = ShortName) %>%
left_join(second_df, by = join_by(ShortName)) %>%
mutate(amended_value = ifelse(original_year < Year, original_value, Value)) %>%
pivot_wider(id_cols = ShortName,
names_from = timepoint,
values_from = amended_value)
#> # A tibble: 3 × 5
#> ShortName t1 t2 t3 t4
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 A 0 0 0 0
#> 2 B 0 5 5 5
#> 3 C 0 1 10 10
创建于 2024-05-13,使用 reprex v2.1.0