2015-09-08 47 views
2

我R中,看起來像這樣如何生成R中遞減幅度的列表?

[1] 1067 576 0 0 0 786 0 

有一個列表我想是這樣的方式排列,以從最大到最小告訴元素的順序另一個列表,所以在這種情況下,它會報告

1 6 2 

也就是說,第1個元素是最大的,然後是第6個元素,然後是第2個元素。

想法?

+0

調用你的向量'v','rev(order(v))'返回:'1 6 2 7 5 4 3'' – jlhoward

+0

'order(x,decrease = TRUE)'。 (-v)' – thelatemail

+0

'z < - order z [!(z%in%which(x == 0))]' – jeremycg

回答

5

你似乎想排除0。

v <- c(1067, 576, 0, 0, 0, 786, 0) 
rev(order(v))[1:length(v[v>0])] 
# [1] 1 6 2 

您還可以使用:

order(v, decreasing=TRUE)[1:length(v[v>0])] 

其數額爲同樣的事情。

0

一個主題另外一對夫婦的變化:

freq <- c(1067,576,0,0,0,786,0) 

傑里米(ISH)

order(-freq)[order(-freq) %in% which(freq != 0)] 

理查德

order(-freq)[seq_along(freq[freq != 0])] 
0

或者只是:

order(-v)[1:sum(!!v)] 
[1] 1 6 2