2017-12-04 19 views
0

私は内部リストを含むリストであるオブジェクト名xを持っています。3番目の要素に基づいてリストのリストを並べ替える

`x$population` 

output 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 11 

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


[[2]] 
[[2]][[1]] 
[1] 1 

[[2]][[2]] 
[1] 20 

[[2]][[3]] 
[1] 2 

私は、第三の要素に基づいてリストをソートできるようにしたい: x$population[[2]][[3]]が、私はそれを行うにはどのようには考えています。

私が開始する方法が分からないので、代わりに問題を再作成し、いくつかのモックコードだ:

z <- list() 

z[[1]] <- list(1, 10, 0.5) 
z[[2]] <- list(1, 10, 0.87) 

がどのように私は、各リストの第三の要素に基づいて、Zの並べ替えについては行くだろう(0.5を、 0.87)となり、大きな値が一番上になります。

ありがとうございます。

+4

[Rで並べ替える方法は?](https://stackoverflow.com/questions/43477069/how-to-sort-list-in-r) –

答えて

4

1)は、第三の要素を取り出す順序を取得し、それによってリストを添字:別のアプローチを

z[order(sapply(z, "[[", 3))] 

2)ソートその次に行列aとしてデータを表現することです:

a <- sapply(z, unlist) 
a[, order(a[3, ])] 
+0

「sapply」がトリックをしているようです素敵で短い。しかし、代替アプローチを提供してくれてありがとう。ありがとうございました。 – Sam

1

私は3番目の要素を抽出してソートします。

私はより複雑なリストを作成する:

z <- list() 

z[[1]] <- list(1, 10, 0.5) 
z[[2]] <- list(1, 10, 0.87) 
z[[3]] <- list(1, 10, 0.2) 

Iは、各要素の第三の要素を抽出する:

thirdelt <- sapply(z, function(x)x[[3]]) 

その後、私はそれを並べ替える:

thirdelt_order <- order(thirdelt) 

Finaly私はそれを適用します。

z <- z[thirdelt_order] 
関連する問題