gpt4 book ai didi

使用 dplyr 替换来自不同数据帧的多列

转载 作者:行者123 更新时间:2023-12-04 00:12:40 24 4
gpt4 key购买 nike

我有两个数据框,其中一个包含 ID 的子集和另一个的列(但具有不同的值)。

ds1 <- data.frame(id = c(1:4),
d1 = "A",
d2 = "B",
d3 = "C")


ds2 <- data.frame(id = c(1,2),
d1 = "W",
d2 = "X")

我希望在 d1 上使用 dplyr 来查找共享列,并将它们的值替换为在 d2 中找到的值,匹配 ID。我可以像这样一次改变一个:

ds1 %>% 
mutate(d1 = ifelse(id %in% ds2$id, ds2$d1[ds2$id==id],d1),
d2 = ifelse(id %in% ds2$id, ds2$d2[ds2$id==id],d2))

然而,在我的实际情况下,我需要这样做 47 次。凭借 across() 的健壮性,我觉得有更好的方法。我也对非 dplyr 解决方案持开放态度。

最佳答案

您可能需要使用 dplyrstringr (也可以在没有 stringr 的情况下完成)


library(tidyverse)

ds1 %>% left_join(ds2, by = 'id') %>%
mutate(across(ends_with('.y'), ~ coalesce(., get(str_replace(cur_column(), '.y', '.x'))))) %>%
select(!ends_with('.x')) %>%
rename_with(~str_remove(., '.y'), ends_with('.y'))

#> id d3 d1 d2
#> 1 1 C W X
#> 2 2 C W X
#> 3 3 C A B
#> 4 4 C A B

reprex package 于 2021-05-10 创建(v2.0.0)

关于使用 dplyr 替换来自不同数据帧的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67473106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com