我有以下向量:
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
任何帮助将不胜感激。
答案 0 :(得分:3)
order
是您所需要的,但是要使其正常工作,您需要负索引。 order
本身返回将对输入向量进行排序的一组索引:
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个元素被删除的原因。