我发现自己在 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 with 0
.
merge
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)