Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort list by first element

Tags:

list

r

I have a list of vectors looking like:

[[1]]
[1] 2 1.0 3.0

[[2]]
[1] 3 3 3

[[3]]
[1] 1 3.0 1.0

and I want it to be sorted by first element of every vector, in decreasing order, like that:

[[1]]
[1] 3 3 3

[[2]]
[1] 2 1.0 3.0    

[[3]]
[1] 1 3.0 1.0

I am looking for a solution that would look like (of course it is not working):

list.sortby(function (x) x[1])
like image 549
Paweł Kozikowski Avatar asked Jan 19 '14 15:01

Paweł Kozikowski


1 Answers

I assumed that your example should not have resulted in putting the second element of your list in the first element of the result? If this is right, you can use lapplyto do what you want:

L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
L
lapply(L, sort)

If you are ordering by the first value in each vector of you list, then this can be done in the following way:

L[order(sapply(L, function(x) x[1], simplify=TRUE), decreasing=TRUE)]

L
[[1]]
[1] 3 3 3

[[2]]
[1] 2 1 3

[[3]]
[1] 1 3 1

From your example, it looks like you want the decreasing order.

like image 130
Marc in the box Avatar answered Oct 04 '22 22:10

Marc in the box