それはまさにあなたが求めたものではありませんが、かなり近いものです。オブジェクトを名前付きリストに入れて使用します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
行名が source を反映するようになったことに注意してくださいdata.frame
。
更新:使用cbind
して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
更新 2: combine
「gdata」パッケージから使用する
> library(gdata)
> combine(df1, df2)
x y source
1 1 2 df1
2 3 4 df1
3 5 6 df2
4 7 8 df2
更新 3: rbindlist
「data.table」から使用
現在使用できる別のアプローチは、rbindlist
from "data.table" とその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
更新 4: map_df
「purrr」から使用
と同様に、各リスト要素に適用する関数とともに、または関数としてfrom "purrr" をrbindlist
使用することもできます。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