df a b 1 1 0 2 2 0 > other.df a b 1 2 3-6ren">
gpt4 book ai didi

r - 你如何在 R 中做条件 "left join"?

转载 作者:行者123 更新时间:2023-12-04 09:38:48 25 4
gpt4 key购买 nike

我发现自己在 R 中做了几次“条件左连接”。用一个例子来说明;如果您有两个数据框,例如:

> df
a b
1 1 0
2 2 0

> other.df
a b
1 2 3

目标是最终得到这个数据框:
> final.df
a b
1 1 0
2 2 3

到目前为止我写的代码:
c <- merge(df, other.df, by=c("a"), all.x = TRUE)
c[is.na(c$b.y),]$b.y <- 0
d<-subset(c, select=c("a","b.y"))
colnames(d)[2]<-b

最终达到我想要的结果。

在四行中有效地执行此操作会使代码非常不透明。
有没有更好,更不麻烦的方法来做到这一点?

最佳答案

这里有两种方法。在这两种情况下,第一行都会进行左合并,返回所需的列。在merge的情况下然后我们必须设置名称。两行中的最后一行替换 NA s 与 0 .

合并

res1 <- merge(df, other.df, by = "a", all.x = TRUE)[-2]
names(res1) <- names(df)
res1[is.na(res1)] <- 0

sqldf
library(sqldf)
res2 <- sqldf("select a, o.b from df left join 'other.df' o using(a)")
res2[is.na(res2)] <- 0

关于r - 你如何在 R 中做条件 "left join"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369837/

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