How about, uxy <- union(row.names(x), row.names(y)) ixy <- intersect(row.names(x), row.names(y)) rbind(x[is.element(row.names(x),uxy),], y[!is.element(row.names(y),ixy),]) Note, simple rbind'ing of the two frames changes common row.names. Gamal