从向量中移除 n 个最小的元素,包括重复元素

remove the n smallest elements from a vector, including repeating elements

我有以下向量:

v = c(1,2,3,1,3,2,3,4,3,3,1, 5, 5,2)

我要获取向量

v_new = c(3,3,2,3,4,3,3,5,2,2)

我从中删除了第一个最小的元素,即 1、1、1、2。请注意,我不想删除数字 2 的另一个出现。函数 order 几乎给了我我需要什么,除了它的输出很奇怪,因为它注意 v[order(v)] 以递增的顺序给出元素并且不给出元素的等级。 rank 也给出了一些奇怪的东西:

v[rank(v)]
 [1] 2 3 3 2 3 3 3 5 3 3 2 5 5 3

如有任何帮助,我们将不胜感激。

order 是你所需要的,但要让它工作,你需要负索引。就其本身而言,order returns 对输入向量进行排序的索引集:

v = c(1,2,3,1,3,2,3,4,3,3,1,5,5,2)

order(v)
#>  [1]  1  4 11  2  6 14  3  5  7  9 10  8 12 13

v[order(v)]
#>  [1] 1 1 1 2 2 2 3 3 3 3 3 4 5 5

您可以使用负索引从向量中删除元素:

(5:1)[c(-1, -2)]
#> [1] 3 2 1

将两者放在一起,从向量中删除最小的元素,取反order结果的前n个元素:

v[-order(v)[1:4]]
#>  [1] 3 3 2 3 4 3 3 5 5 2

请注意,order 从前面索引绑定元素,这就是为什么前 2 个被删除的原因。