Darw1n34
Darw1n34

Reputation: 332

Appending data frames in R based on column names

I am relatively new to R, so bear with me. I have a list of data frames that I need to combine into one data frame. so:

  dfList <- list(
    df1 = data.frame(x=letters[1:2],y=1:2),
    df2 = data.frame(x=letters[3:4],z=3:4)
  )

comes out as:

$df1   
  x y
1 a 1
2 b 2

$df2
  x z
1 c 3
2 d 4

and I want them to combine common columns and add anything not already there. the result would be:

final result
  x y z
1 a 1
2 b 2
3 c   3
4 d   4

Is this even possible?

Upvotes: 0

Views: 1786

Answers (3)

Edgar
Edgar

Reputation: 256

You could do that with base function merge():

merge(dfList$df1, dfList$df2, by = "x", all = TRUE)
#   x  y  z
# 1 a  1 NA
# 2 b  2 NA
# 3 c NA  3
# 4 d NA  4

Or with dplyr package with function full_join:

dplyr::full_join(dfList$df1, dfList$df2, by = "x")
#   x  y  z
# 1 a  1 NA
# 2 b  2 NA
# 3 c NA  3
# 4 d NA  4

They both join everything that is in both data.frames.

Hope that works for you.

Upvotes: 1

BENY
BENY

Reputation: 323306

Just using do.call with rbind.fill

do.call(rbind.fill,dfList)
  x  y  z
1 a  1 NA
2 b  2 NA
3 c NA  3
4 d NA  4

Upvotes: 4

divibisan
divibisan

Reputation: 12155

Yep, it's pretty easy, actually:

library(dplyr)
df_merged <- bind_rows(dfList)
df_merged

  x  y  z
1 a  1 NA
2 b  2 NA
3 c NA  3
4 d NA  4

And if you don't want NA in the empty cells, you can replace them like this:

df_merged[is.na(df_merged)] <- 0  # or whatever you want to replace NA with

Upvotes: 5

Related Questions