【问题标题】:Removing certain elements from a vector in R [duplicate]从R中的向量中删除某些元素[重复]
【发布时间】:2017-03-24 17:58:04
【问题描述】:

我有一个名为 data 的向量,它有大约 35000 个元素(数字)。我有一个数字向量 A。我想删除向量数据中 A 元素的所有外观。例如,如果 A 是向量 [1,2]。我想删除矢量数据中 1 和 2 的所有外观。我怎样才能做到这一点?是否有内置功能可以做到这一点?我想不出办法。我认为用循环来做这件事需要很长时间。谢谢!

【问题讨论】:

  • 您的问题不清楚,并且您没有包含可重现的示例。也许您正在寻找不同的设置,?setdiff
  • @lmo,谢谢。我猜 setdiff 有效。我认为我的例子很清楚。我只想从数据向量中删除 A 元素的所有外观。我举了一个例子 [1,2] 。例如,元素 1 可能在数据向量中出现 1000 次(或根本不出现),我想删除所有这些,对于 2 也是如此。我认为这很清楚。
  • 如果您继续发布 R 问题,您应该阅读 how to create a great R example 并遵循该建议。 (不是我的反对票,顺便说一句)。

标签: r


【解决方案1】:

有这个方便的%in%-operator。查一下,这是我能想到的任何编程语言中最好的事情之一!您可以使用它来检查一个向量 A 的所有元素与另一个向量 B 的所有元素,并返回一个逻辑向量,该向量给出了可以在 B 中找到的 A 中所有元素的位置。这就是您所需要的!如果你是 R 新手,可能会觉得有点奇怪,但你会很习惯的。

好的,那怎么用呢?假设datvec 是您的数字向量:

datvec = c(1, 4, 1, 7, 5, 2, 8, 2, 10, -1, 0, 2)
elements_2_remove = c(1, 2)

datvec %in% elements_2_remove
## [1]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE

因此,您会看到一个向量,该向量为您提供了 datvec 中 12 的位置。因此,您可以使用它来索引您想要保留的内容(通过否定它):

datvec = datvec[!(datvec %in% elements_2_remove)]

你就完成了!

【讨论】:

    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多