[R] How to quickly convert a data.frame into a structure of lists

Frederic F fournier.frederic at gmail.com
Wed Aug 10 16:30:54 CEST 2011


Hello Duncan,  

Here is a small example to illustrate what I am trying to do.

# Example data.frame
df=data.frame(A=c("a","a","b","b"), B=c("X","X","Y","Z"), C=c(1,2,3,4)) 
#   A B C
# 1 a X 1
# 2 a X 2
# 3 b Y 3
# 4 b Z 4

### First way of getting the list structure (ls1) using imbricated lapply
loops:
# Get the structure and populate it:
ls1<-lapply(levels(df$A), function(levelA) { 
      lapply(levels(df$B), function(levelB) {df$C[df$A==levelA &
df$B==levelB]})
})
# Apply the names:
names(list_structure)<-levels(df$A)
for (i in 1:length(list_structure))
{names(list_structure[[i]])<-levels(df$B)}

# Result:
ls1$a$X
# [1] 1 2
ls1$b$Z
# [1] 4

The data.frame will always be 'complete', i.e., there will be a value in
every row for every column. 
I want to produce a structure like this one quickly (I aim at something
below 10 seconds) for a dataset containing between 1 and 2 millions of rows. 

I hope that this helps clarify things.

Thanks for your help,

Frederic 

--
View this message in context: http://r.789695.n4.nabble.com/How-to-quickly-convert-a-data-frame-into-a-structure-of-lists-tp3731746p3733073.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list