【问题标题】:How to remove a single non unique element from a list or vector in r如何从r中的列表或向量中删除单个非唯一元素
【发布时间】:2013-12-03 10:37:30
【问题描述】:

我正在寻找的是一种删除单个非唯一元素的有效方法。

假设我有向量:

c(1,1,1,2,2,3,3,4)

我想删除:

c(1,2)

这样的结果是

c(1,1,2,3,3,4)

我确信它非常简单,但我不知所措。出声!

【问题讨论】:

    标签: r vector unique


    【解决方案1】:

    您要查找的函数是match。这是代码

    a <- c(1,1,1,2,2,3,3,4)
    b <- c(1,2)
    
    a[-match(b, a)]
    ### [1] 1 1 2 3 3 4
    

    之所以有效,是因为matchonly 返回其第一个参数在第二个参数中的 (first) 匹配位置的向量。

    编辑:正如@Ananda Mahto 所指出的,这仅在b 中的所有元素也在a 中时才有效。对于更通用的公式,请使用以下函数

    element_rm <- function(a, b){
      if (any(b%in%a)) return(a[-match(b[b%in%a], a)])
      else return(a)
    }
    a <- c(1,1,1,2,2,3,3,4)
    element_rm(a, c(1,2))
    ##  [1] 1 1 2 3 3 4
    element_rm(a, c(2,5))
    ## [1] 1 1 1 2 3 3 4
    element_rm(a, 5)
    ## [1] 1 1 1 2 2 3 3 4
    element_rm(a, c(4,4))
    ## [1] 1 1 1 2 2 3 3
    

    【讨论】:

    • 啊,太感谢了,我完全忘记了!我正试图以一种疯狂的方式使用 apply 函数!
    • +1,但我会将其修改为:a[-match(which(b %in% a), a)]。与b &lt;- c(1, 7)(或输入向量中不存在的其他值)的情况进行比较。事实上,里面应该也有一个ifelse
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多