KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a list of dataframes which I eventually want to merge while maintaining a record of their original dataframe name or list index. This will allow me to subset etc across all the rows. To accomplish this I would like to add a new variable 'id' to every dataframe, which contains the name/index of the dataframe it belongs to. Edit: "In my real code the dataframe variables are created from reading multiple files using the following code, so I don't have actual names only those in the 'files.to.read' list which I'm unsure if they will align with the dataframe order: mylist <- llply(files.to.read, read.csv) A few methods have been highlighted in several posts: Working-with-dataframes-in-a-list-drop-variables-add-new-ones and Using-lapply-with-changing-arguments I have tried two similar methods, the first using the index list: df1 <- data.frame(x=c(1:5),y=c(11:15)) df2 <- data.frame(x=c(1:5),y=c(11:15)) mylist <- list(df1,df2) # Adds a new coloumn 'id' with a value of 5 to every row in every dataframe. # I WANT to change the value based on the list index. mylist1 <- lapply(mylist, function(x){ x$id <- 5 return (x) } ) #Example of what I WANT, instead of '5'. #> mylist1 #[[1]] #x y id #1 1 11 1 #2 2 12 1 #3 3 13 1 #4 4 14 1 #5 5 15 1 # #[[2]] #x y id #1 1 11 2 #2 2 12 2 #3 3 13 2 #4 4 14 2 #5 5 15 2 The second attempts to pass the names() of the list. # I WANT it to add a new coloumn 'id' with the name of the respective dataframe # to every row in every dataframe. mylist2 <- lapply(names(mylist), function(x){ portfolio.results[[x]]$id <- "dataframe name here" return
Tags (comma-separated)
Save Edits
Cancel