【问题标题】:R - Remove elements in a vector that appear more than once [duplicate]R - 删除向量中多次出现的元素[重复]
【发布时间】:2020-12-01 20:39:01
【问题描述】:

假设我有以下向量

vec <- rep(1:20,sample(1:5, 20, replace = T))
table(vec)
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 1  5  4  3  5  2  1  1  3  5  3  2  3  1  5  5  3  1  4  1 

我只想保留出现一次的数字。任何出现不止一次的东西,我都想删除它。所以最后我想结束

1  7  8 14 18 20

目前,我正在使用以下命令生成它

vec2 <- names(which(table(vec) == 1))
vec2

但我想知道是否有一种更高效(更高效)的方式来做到这一点。

【问题讨论】:

  • 试试vec[!vec %in% vec2]
  • data.table::data.table(vec)[, .N, vec][N == 1, vec] 对于更大的向量比表快得多

标签: r


【解决方案1】:

我们可以使用%in% 和 negate (!) 根据 OP 的代码创建一个逻辑向量

vec[!vec %in% vec2]

或者在一行中使用avelength

vec[ave(seq_along(vec), vec, FUN = length)>1]

【讨论】:

  • 感谢您的提示。但是,我正在尝试另一种方式,这不需要我必须做的事情来获得vec2。您提供的第二段代码由于某种原因不起作用。
  • @ZuhaibAhmed 您尝试的示例是相同的还是不同的?因为这对我有用。你有一个因子列吗?我会把它改成vec[ave(seq_along(vec), vec, FUN = length)&gt;1]
  • 抱歉,它确实有效。我没有意识到您的代码 sn-p 中有 &gt;1 而不是 ==。谢谢!
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 2019-04-03
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多