bind many data frames adding a column with their id
dataframe, r
Solution
You could use `parse` and `eval` to get the data frames from `df_names`:
do.call(rbind, lapply(df_names, function(x){data.frame(id=x, eval(parse(text=x)))}))
id x y
1 df.1 1 2
2 df.1 2 2
3 df.2 2 4
4 df.2 4 4
5 df.3 2 4
6 df.3 2 5
Problem
I have many data frames named repeatably: ``` df.1 <- data.frame("x"=c(1,2), "y"=2) df.2 <- data.frame("x"=c(2,4), "y"=4) df.3 <- data.frame("x"=2, "y"=c(4,5)) ``` All data frames have the same number of rows and columns. I want to bind them, adding a column with the id of the data frame. The id would be the name of the source data frame. I know I could do this manually: ``` rbind(data.frame(id = "df.1", df.1), data.frame(id = "df.2", df.2), data.frame(id = "df.3", df.3)) ``` But there's a lot of them and their number will change in the future. I tried writing for loops but they didn't work. I suppose that's because I'm basing them on a list of strings containing data frames' names rather than a list of data frames themselves. ``` df_names <- ls(pattern = "df.\\d+") for (i in df_names) { i$id <- i i } ``` ...but I also haven't found any automated way of creating a list of data frames with repeatable names. And even if I do, I'm not that sure the for-loop above would work :)