如何循环使用2个数字序列

时间:2018-01-13 22:06:58

标签: r data.table

我有一组名为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。感谢。

2 个答案:

答案 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的备忘单:

Data Wrangling