[R] Re-sort list of vectors

Dimitris Rizopoulos dimitris.rizopoulos at med.kuleuven.be
Tue Aug 16 11:45:27 CEST 2005


maybe something like this can be helpful:

x <- list("1" = c(a = 1, b = 2, c = 3), "2" = c(d = 4, b = 5, e = 6))
################
y <- data.frame(nam = rep(names(x), sapply(x, length)), val = 
unlist(x))
lapply(split(y, unlist(lapply(x, names))), function(x){ res <- x$val; 
names(res) <- x$nam; res })


Best,
Dimitris

----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven

Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/16/336899
Fax: +32/16/337015
Web: http://www.med.kuleuven.be/biostat/
     http://www.student.kuleuven.be/~m0390867/dimitris.htm


----- Original Message ----- 
From: "Jan Hummel" <Hummel at mpimp-golm.mpg.de>
To: <r-help at stat.math.ethz.ch>
Sent: Monday, August 15, 2005 7:09 PM
Subject: Re: [R] Re-sort list of vectors


Thanks a lot! But unfortunately I will not know the dimensions of both 
lists. And further, the lists may be (partly) disjoint as: x <- 
list("1"=c(a=1, b=2, c=3), "2"=c(d=4, b=5, e=6)). And last but not 
least I'm really have to have access to the names of the named list 
items.

The problem I dealt with is in unlist() merging the names together, as 
you can see in your example given: "V1", "V2" and "V3". Because off 
interpreting the names later as identifiers in db queries I'm really 
interested in getting something like list("a"=c("1"=1), "b"=c("1"=2, 
"2"=5), "c"=c("1"=3), "d"=c("1"=4), "e"=c("1"=6)) for the above input.
By giving the result this way I'm able to extract both names from two 
sets as well as the according value between both items.

One point could be to build a matrix but this matrix would have many 
NA's. So I prefer Lists of Lists.

Any ideas?

cheers
Jan

-----Ursprüngliche Nachricht-----
Von: Liaw, Andy [mailto:andy_liaw at merck.com]
Gesendet: Montag, 15. August 2005 17:31
An: Jan Hummel; r-help at stat.math.ethz.ch
Betreff: RE: [R] Re-sort list of vectors

If all vectors in the list have the same length, why not use a matrix? 
Then you'd just transpose the matrix if you need to.  If you really 
have to have it as a list, here's one possibility:

> x <- list("1"=c(a=1, b=2, c=3), "2"=c(a=4, b=5, c=6)) x
$"1"
a b c
1 2 3

$"2"
a b c
4 5 6
> as.list(as.data.frame(t(matrix(unlist(x), nrow=3))))
$V1
[1] 1 4

$V2
[1] 2 5

$V3
[1] 3 6

Andy


> From: Jan Hummel
>
> Hi.
> Can anyone suggest a simple way to re-sort in R a list of vectors of
> the following form?
>
> input
> $"1"
> a b c
> 1 2 3
> $"2"
> a b c
> 4 5 6
>
> Output should be something like:
> "a"
> "1" 1
> "2" 4
> "b"
> "1" 2
> "2" 5
> "c"
> "1" 3
> "2" 6
>
> I've been futzing with mapply(), outer(), split(), rbind() and so on
> but haven't found an elegant solution.
>
> Thanks,
> Jan.
>
> P.S. E-mailed CCs of posted replies appreciated.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
>
>

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! 
http://www.R-project.org/posting-guide.html




More information about the R-help mailing list