我有一组名为list2008,list2009 ...到list2017的数据框,所有数据框都有相同的列。我将这些数据框与以下粗略代码合并:
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)
我想知道是否有更优雅的方式使用循环来实现agg。感谢。
答案 0 :(得分:0)
您可以使用bind_rows
中的dplyr
功能合并所有data.frames。步骤是:
1.在列表中添加所有数据框
2.使用bind_rows
函数合并具有公共列的数据框
让我们举个例子。
## 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
答案 1 :(得分:0)
bind_rows命令是最快的方法:
bind_rows(list2008,list2009)
这将在list2008下追加list2009与列匹配。
Rstudio有一个很好的使用dplyr的备忘单: