Here is one approach that gives almost the same answer as your example: > A1<-list(c(1:4),c(2,4,5),23,c(4,5,13)) > > A2 <- sort(unique(unlist(A1))) > names(A2) <- A2 > sapply(A2, function(x) which( sapply(A1, function(y) x %in% y) ), + simplify=FALSE, USE.NAMES=TRUE ) $`1` [1] 1
$`2` [1] 1 2 $`3` [1] 1 $`4` [1] 1 2 4 $`5` [1] 2 4 $`13` [1] 4 $`23` [1] 3 If you want the `23` to be in the 23rd element of the list (with empty values before it) then just change A2 to be a vector from 1 to the largest value On Tue, Jul 8, 2014 at 10:39 AM, Lorenzo Alfieri <alfio...@hotmail.com> wrote: > Hi, > I'm trying to find a way to reorder the elements of a list. > Let's say I have a list like this: > A1<-list(c(1:4),c(2,4,5),23,c(4,5,13)) > >> A1 > [[1]] > [1] 1 2 3 4 > > [[2]] > [1] 2 4 5 > > [[3]] > [1] 23 > > [[4]] > [1] 4 5 13 > > All the elements included in it are values, while each sublist is a time index > Now, I'd like to reorder the list (without looping) so to obtain one sublist > for each value, which include all the time indices where each value appears. > In other words, the result should look like this: >>A2 > [[1]] > [1] 1 > > [[2]] > [1] 1 2 #because value "2" appears in the time index [[1]] and [[2]] of A1 > > [[3]] > [1] 1 > > [[4]] > [1] 1 2 4 > > [[5]] > [1] 2 4 > > [[13]] > [1] 4 > > [[23]] > [1] 3 > > Any suggestion? > Thanks > Alfio > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Gregory (Greg) L. Snow Ph.D. 538...@gmail.com ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.