2014-01-19 17 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

與其他人一樣,但使用Map來提取每個向量的第一個元素。

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)]