0

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
)))
astroport
  • 3
  • 2

0 Answers0