How do you do conditional "left join" in R? -


i have found myself doing "conditional left join" several times in r. illustrate example; if have 2 data frames such as:

> df b 1 1 0 2 2 0 > other.df b 1 2 3 

the goal end data frame:

> final.df b 1 1 0 2 2 3 

the code i've been written far:

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 

to arrive result wanted.

doing in 4 lines makes code opaque. there better, less cumbersome way this?

here 2 ways. in both cases first line left merge returning required columns. in case of merge have set names. final line in both lines replaces nas 0.

merge

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

sqldf

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

Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -