从向量中移除 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 个被删除的原因。
我有以下向量:
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 个被删除的原因。