这不完全是你想要的,但非常接近.将你的对象放入一个命名列表,并使用do.call(rbind...)
> do.call(rbind, list(df1 = df1, df2 = df2))
x y
df1.1 1 2
df1.2 3 4
df2.1 5 6
df2.2 7 8
请注意,行名称现在反映了源data.frame
.
Update: Use cbind
and rbind
另一个选项是创建如下基本函数:
AppendMe <- function(dfNames) {
do.call(rbind, lapply(dfNames, function(x) {
cbind(get(x), source = x)
}))
}
然后,该函数获取要"叠加"的data.frame
个名称的字符向量,如下所示:
> AppendMe(c("df1", "df2"))
x y source
1 1 2 df1
2 3 4 df1
3 5 6 df2
4 7 8 df2
Update 2: Use combine
from the "gdata" package
> library(gdata)
> combine(df1, df2)
x y source
1 1 2 df1
2 3 4 df1
3 5 6 df2
4 7 8 df2
Update 3: Use rbindlist
from "data.table"
现在可以使用的另一种方法是使用"data.table"中的rbindlist
及其idcol
参数.有鉴于此,方法可以是:
> rbindlist(mget(ls(pattern = "df\\d+")), idcol = TRUE)
.id x y
1: df1 1 2
2: df1 3 4
3: df2 5 6
4: df2 7 8
Update 4: use map_df
from "purrr"
与rbindlist
类似,您还可以使用"purrr"中的map_df
和I
或c
作为应用于每个列表元素的函数.
> mget(ls(pattern = "df\\d+")) %>% map_df(I, .id = "src")
Source: local data frame [4 x 3]
src x y
(chr) (int) (int)
1 df1 1 2
2 df1 3 4
3 df2 5 6
4 df2 7 8