Merge two data frames in R based on common columns

I need to combine two data frames that look like this: I want to take a common column among data frames and combine them together. Rows in two data frames will be completely different.

abc row1 1 0 1 row2 1 0 1 

another data block

  dacf row3 1 0 1 1 row4 1 1 0 0 

I want the final dataset to look like this

  ac row1 1 1 row2 1 1 row3 0 1 row4 1 0 

Here is a dput of two data frames

 dput(x1) structure(list(d = c(1L, 1L), a = 0:1, c = c(1L, 0L), f = c(1L, 0L)), .Names = c("d", "a", "c", "f"), row.names = c("row3", "row4" ), class = "data.frame") dput(x2) structure(list(a = c(1L, 1L), b = c(0L, 0L), c = c(1L, 1L)), .Names = c("a", "b", "c"), row.names = c("row1", "row2"), class = "data.frame") 
0
source share
2 answers

You can get common names and then use string binding:

 common <- intersect(names(x1), names(x2)) rbind(x1[,common], x2[,common]) ac row3 0 1 row4 1 0 row1 1 1 row2 1 1 

EDIT: to match the expected result

  rbind(x2[,common], x1[,common]) ac row1 1 1 row2 1 1 row3 0 1 row4 1 0 
+5
source

Very rudimentary version

 > X <- merge(x1, x2, all=TRUE) > X[, which(colSums(!is.na(X))==nrow(X))] ac 1 0 1 2 1 0 3 1 1 4 1 1 
+1
source

Source: https://habr.com/ru/post/1238194/


All Articles