R: Converting a nested list to a dataframe and getting list level names of als factors

I have a nested list:

list1 <- list("A"=c(1,1,1), "B"=c(2,2,2), "C"=c(3,3,3)) list2 <- list("F1" = list1, "F2" = list1) 

and I would like to get the last level of the list (containing the vector) as a data frame, and I would like to get the levels of the list as factors:

  Level1 Level2 V1 V2 V3 1 F1 A 1 1 1 2 F1 B 2 2 2 3 F1 C 3 3 3 4 F2 A 1 1 1 5 F2 B 2 2 2 6 F2 C 3 3 3 

The first part is beautifully given:

 data.frame(matrix(unlist(list2), ncol=3, byrow=T)) 

However, I did not find a good way to also get list-level names as factors in the same frame. Any ideas?:)

Edit:. The procedure should work with p parameters.

+5
source share
3 answers

melt from "reshape2" has a method for list s. Perhaps it can be used in this case. Something like that:

 library(reshape2) dcast(cbind( coln = sequence(rapply(list2, length)), melt(list2)), L1 + L2 ~ coln, value.var = "value") # L1 L2 1 2 3 # 1 F1 A 1 1 1 # 2 F1 B 2 2 2 # 3 F1 C 3 3 3 # 4 F2 A 1 1 1 # 5 F2 B 2 2 2 # 6 F2 C 3 3 3 
+4
source

You can list only one level than convert the names of the growths to columns and combine everything into one data.frame file:

 xx <- do.call(rbind,unlist(list2,recursive = FALSE)) cbind.data.frame(do.call(rbind,strsplit(rownames(xx),'.',fixed=TRUE)) ,xx) 1 2 1 2 3 F1.A F1 A 1 1 1 F1.B F1 B 2 2 2 F1.C F1 C 3 3 3 F2.A F2 A 1 1 1 F2.B F2 B 2 2 2 F2.C F2 C 3 3 3 
+2
source

Now that your own solution provides values ​​in columns X1 , X2 and X3 , you can do the following to get the first two columns Level1 and Level2 from the names of your two lists

 level1 <- as.factor(rep(names(list2), each = length(list1))) level2 <- as.factor(rep(names(list1), times = length(list2))) data.frame(Level1 = level1, Level2 = level2, matrix(unlist(list2), ncol=3, byrow=T)) 

which will result in the following:

  Level1 Level2 X1 X2 X3 1 F1 A 1 1 1 2 F1 B 2 2 2 3 F1 C 3 3 3 4 F2 A 1 1 1 5 F2 B 2 2 2 6 F2 C 3 3 3 
+2
source

Source: https://habr.com/ru/post/1204002/


All Articles