【问题标题】:remove the n smallest elements from a vector, including repeating elements从向量中删除 n 个最小的元素,包括重复元素
【发布时间】:2018-12-03 06:50:55
【问题描述】:

我有以下向量:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: r sorting rank


    【解决方案1】:

    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 个被删除的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多