0

I have a set of data frames named list2008, list2009... to list2017, all with same columns. I am merging these data frames with the following chunky codes:

byvar = c("A","B","C")
tmp1 = merge(list2008, list2009, all = TRUE,by = byvar)
tmp2 = merge(tmp1, list2010, all = TRUE,by = byvar)
tmp3 = merge(tmp2, list2011, all = TRUE,by = byvar)
tmp4 = merge(tmp3, list2012, all = TRUE,by = byvar)
tmp5 = merge(tmp4, list2013, all = TRUE,by = byvar)
tmp6 = merge(tmp5, list2014, all = TRUE,by = byvar)
tmp7 = merge(tmp6, list2015, all = TRUE,by = byvar)
tmp8 = merge(tmp7, list2016, all = TRUE,by = byvar)
agg = merge(tmp8, list2017, all = TRUE,by = byvar)

I'm wondering if there is a more elegant way using loop to achieve agg. Thanks.

kswonder
  • 11
  • 2

2 Answers2

0

You can use bind_rows function from dplyr to merge all data.frames. The steps are: 1. Add all data frames in a list 2. Use bind_rows function to merge data frames having common columns

Lets take an example.

## The data
df1 <- data.frame(id = c(1:10), name = c(LETTERS[1:10]), stringsAsFactors = FALSE)
df2 <- data.frame(id = 11:20, name = LETTERS[11:20], stringsAsFactors = FALSE)
df3 <- data.frame(id = 21:30, name = LETTERS[15:24], stringsAsFactors = FALSE)

Create list of all data.frames. 
z1 <- list(df1 = df1, df2 = df2, df3 = df3)

# Merge with bind_rows
merge <- bind_rows(z1)

#Result -- combined data
#> merge 
#   id name
#1   1    A
#2   2    B
#3   3    C
#4   4    D
#5   5    E
#6   6    F
#7   7    G
#.........
#30 30   X
MKR
  • 19,739
  • 4
  • 23
  • 33
0

The bind_rows command is the fastest way:

bind_rows(list2008,list2009)

That will append list2009 under list2008 matching the columns.

Rstudio has a nice cheat sheet for using dplyr:

Data Wrangling

Bryan Adams
  • 174
  • 1
  • 12