[R] Convert list of data frames to one data frame

Ira Sharenow ir@@h@renow100 @ending from y@hoo@com
Fri Jun 29 08:36:23 CEST 2018


I have a list of data frames which I would like to combine into one data 
frame doing something like rbind. I wish to combine in column order and 
not by names. However, there are issues.

The number of columns is not the same for each data frame. This is an 
intermediate step to a problem and the number of columns could be 
2,4,6,8,or10. There might be a few thousand data frames. Another problem 
is that the names of the columns produced by the first step are garbage.

Below is a method that I obtained by asking a question on stack 
overflow. Unfortunately, my example was not general enough. The code 
below works for the simple case where the names of the people are 
consistent. It does not work when the names are realistically not the same.

https://stackoverflow.com/questions/50807970/converting-a-list-of-data-frames-not-a-simple-rbind-second-row-to-new-columns/50809432#50809432 


Please note that the lapply step sets things up except for the column 
name issue. If I could figure out a way to change the column names, then 
the bind_rows step will, I believe, work.

So I really have two questions. How to change all column names of all 
the data frames and then how to solve the original problem.

# The non general case works fine. It produces one data frame and I can 
then change the column names to

# c("first1", "last1","first2", "last2","first3", "last3",)

#Non general easy case

employees4BList = list(data.frame(first1 = "Al", second1 = "Jones"),

data.frame(first1 = c("Al", "Barb"), second1 = c("Jones", "Smith")),

data.frame(first1 = c("Al", "Barb", "Carol"), second1 = c("Jones", 
"Smith", "Adams")),

data.frame(first1 = ("Al"), second1 = "Jones"))

employees4BList

bind_rows(lapply(employees4BList, function(x) rbind.data.frame(c(t(x)))))

# This produces a nice list of data frames, except for the names

lapply(employees4BList, function(x) rbind.data.frame(c(t(x))))

# This list is a disaster. I am looking for a solution that works in 
this case.

employees4List = list(data.frame(first1 = ("Al"), second1 = "Jones"),

data.frame(first2 = c("Al2", "Barb"), second2 = c("Jones", "Smith")),

data.frame(first3 = c("Al3", "Barbara", "Carol"), second3 = c("Jones", 
"Smith", "Adams")),

data.frame(first4 = ("Al"), second4 = "Jones2"))

  bind_rows(lapply(employees4List, function(x) rbind.data.frame(c(t(x)))))

Thanks.

Ira


	[[alternative HTML version deleted]]



More information about the R-help mailing list