【问题标题】:How to remove only one instance of a duplicate value in a vector in R?如何仅删除R中向量中重复值的一个实例?
【发布时间】:2011-11-12 04:25:30
【问题描述】:

让我们考虑一个数值向量“x”。有些值可能是重复的。我需要一个一个地删除最大值,直到 x 为空。

问题,如果我使用:

x <- x[x != max(x)]

它会删除等于最大值的所有重复项。我只想删除其中一个重复项。所以直到现在,我这样做:

max.x <- x[x == max(x)]
max.x <- max.x[1:length(max.x) - 1]
x <- c(x[x != max(x)], max.x)

但这远非计算效率,而且我在 R 方面还不够好,无法找到正确的方法来做到这一点。谁能有更好的把戏?

谢谢

【问题讨论】:

    标签: r vector


    【解决方案1】:

    只是为了好玩,
    x

    冲洗、起泡、重复。

    dagnabit 为什么 4 个空格不会导致代码着色?

    【讨论】:

    • 超简单的卡尔,我觉得你的回答比我的好。
    【解决方案2】:

    你并不完全清楚你的问题的范围是什么,所以我只给出我想到的第一个建议。使用sort 函数以降序获取值列表。

    sorted &lt;- sort(x,decreasing=TRUE,index.return=TRUE)

    您现在可以迭代地从x 中删除最高项目。在您的子集数据上反复使用 sort 函数效率低下 - 如果可能,最好保留 x 的永久副本并从中删除。

    考虑这种方法

    # random set of data with duplicates
    x <- floor(runif(50)*15)
    # sort with index.return returns a sorted x in sorted$x and the 
    # indices of the sorted values from the original x in sorted$ix
    sorted <- sort(x,decreasing=TRUE,index.return=TRUE)
    
    for( i in 1:length(x) )
    {
     # remove data from x
     newX <- x[-sorted$ix[1:i]]
     print(sort(newX,decreasing=TRUE))
    }
    

    【讨论】:

    • 谢谢,现在这听起来微不足道...就上下文而言,我对一个数据集执行了一个统计,我通过删除最极端的值(最大值和最小值)逐步截断该数据集。
    【解决方案3】:

    我理解你的问题的方式,

     ?unique
    

    可能会给你你想要的。

    Rgds, 雷纳

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多