I have a list of named dataframes of varying row number. I would like to concatenate all of this list's dataframes, preserving their name as a new column (dataframe_name)filled with the name of each dataframe.
Example of input dataframes:
$name_of_dataframe1
chr pos names ref type gene
1 chr1 2380330 name1 T A/B nameA
2 chr2 4199521 . G B/C nameA
3 chr3 4377830 name2 A C/D nameA
4 chr4 4337910 . T D/E nameB
5 chr5 35445 name3 G F/G nameB
6 chr6 635524 . T H/I nameB
7 chr7 53563732 . G J/K nameC
8 chr8 1353768 name4 G L/L nameB
9 chr9 12533789 name5 T M/M nameB
$name_of_dataframe2
chr pos names ref type gene
1 chr1 499521 . CCG C/C nameB
2 chr16 5737830 name1 A G/G nameB
3 chr2 7910 . CT CT/C nameA
4 chr4 5603 name4 G G/A nameA
5 chr5 347170 name3 CGCCCT C/C nameC
6 chr3 3133768 name6 G G/A nameD
7 chr7 2533789 name5 T C/C nameB
Desired output:
chr pos names ref type gene dataframe_name
1 chr1 2380330 name1 T A/B nameA name_of_dataframe1
2 chr2 4199521 . G B/C nameA name_of_dataframe1
3 chr3 4377830 name2 A C/D nameA name_of_dataframe1
4 chr4 4337910 . T D/E nameB name_of_dataframe1
5 chr5 35445 name3 G F/G nameB name_of_dataframe1
I have tried using the following map function:
mylist <- map(mylist, ~cbind(.x, file_name = names(mylist)))
but I get the following error:
Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 9, 25
dput for reproducible example:
list(`name_of_dataframe1` = structure(list(chr = c("chr1",
"chr2", "chr3", "chr4", "chr5", "chr6", "chr7", "chr8", "chr9"
), pos = c(2380330L, 4199521L, 4377830L, 4337910L, 35445L,
635524L, 53563732L, 1353768L, 12533789L), names = c("name1",
".", "name2", ".", "name3", ".", ".", "name4",
"name5"), ref = c("T", "G", "A", "T", "G", "T",
"G", "G", "T"), type = c("A/B", "B/C", "C/D", "D/E", "F/G",
"H/I", "J/K", "L/L", "M/M"), gene = c("nameA", "nameA", "nameA",
"nameB", "nameB", "nameB", "nameC", "nameB", "nameB")), class = "data.frame", row.names = c(NA,
-9L)), `name_of_dataframe2` = structure(list(chr = c("chr1",
"chr16", "chr2", "chr4", "chr5", "chr3", "chr7"), pos = c(499521L,
5737830L, 7910L, 5603L, 347170L, 3133768L, 2533789L
), names = c(".", "name1", ".", "name4", "name3",
"name6", "name5"), ref = c("G", "A", "B", "G", "C",
"G", "T"), type = c("C/C", "G/G", "CT/C", "G/A", "C/C", "G/A",
"C/C"), gene = c("nameB", "nameB", "nameA", "nameA", "nameC",
"nameD", "nameB")), class = "data.frame", row.names = c(NA, -7L
)))