2014-01-19 3 views
6

У меня есть список векторов выглядит как:Как отсортировать список по первому элементу

[[1]] 
[1] 2 1.0 3.0 

[[2]] 
[1] 3 3 3 

[[3]] 
[1] 1 3.0 1.0 

, и я хочу, чтобы быть отсортированы по первым элементом каждого вектора, в порядке убывания, как это:

[[1]] 
[1] 3 3 3 

[[2]] 
[1] 2 1.0 3.0  

[[3]] 
[1] 1 3.0 1.0 

Я ищу решение, которое будет выглядеть как (конечно, это не работает):

list.sortby(function (x) x[1]) 

ответ

2

Я предположил, что ваш examp le не должен был привести к тому, чтобы второй элемент вашего списка был в первом элементе результата? Если это так, вы можете использовать lapply делать то, что вы хотите:

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

Если вы заказываете первым значением в каждом векторе из вас список, то это можно сделать следующим образом:

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 

Из вашего примера, похоже, вы хотите уменьшить порядок.

1

Похожие на @MarkintheBox.

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

L[order(sapply(L,head,1),decreasing=T)] 
# [[1]] 
# [1] 3 3 3 
# 
# [[2]] 
# [1] 2 1 3 
# 
# [[3]] 
# [1] 1 3 1 
0

То же, что и другие, но с использованием Карты, чтобы извлечь первый элемент каждого вектора.

L <- list(c(2,1,3), c(3,3,3), c(1,3,1)) 
idx <- as.numeric(Map(function(vec){vec[1]},L)) 
L[order(idx, decreasing=TRUE)] 
Смежные вопросы