我R中,看起來像這樣如何生成R中遞減幅度的列表?
[1] 1067 576 0 0 0 786 0
有一個列表我想是這樣的方式排列,以從最大到最小告訴元素的順序另一個列表,所以在這種情況下,它會報告
1 6 2
也就是說,第1個元素是最大的,然後是第6個元素,然後是第2個元素。
想法?
我R中,看起來像這樣如何生成R中遞減幅度的列表?
[1] 1067 576 0 0 0 786 0
有一個列表我想是這樣的方式排列,以從最大到最小告訴元素的順序另一個列表,所以在這種情況下,它會報告
1 6 2
也就是說,第1個元素是最大的,然後是第6個元素,然後是第2個元素。
想法?
你似乎想排除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])]
其數額爲同樣的事情。
一個主題另外一對夫婦的變化:
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])]
或者只是:
order(-v)[1:sum(!!v)]
[1] 1 6 2
調用你的向量'v','rev(order(v))'返回:'1 6 2 7 5 4 3'' – jlhoward
'order(x,decrease = TRUE)'。 (-v)' – thelatemail
'z < - order z [!(z%in%which(x == 0))]' – jeremycg