【问题标题】:Finding strings not %in% other vector of strings [duplicate]查找字符串不是 %in% 其他字符串向量 [重复]
【发布时间】:2013-04-05 22:43:16
【问题描述】:

如果你有一个字符串向量并且你想知道哪个匹配。使用 %in% 很简单。

x <- c("red","blue","green")
y <- c("yellow","blue","orange")

which(x %in% y) # Literally, which X are in Y.

但是相反的情况呢,您想在哪里找到哪些 X 不在 Y 中?

【问题讨论】:

  • 试试which(!x %in% y)
  • Roman add it as a solution
  • @RomanLuštrik 我用的是which(is.na(match(x,y)),它看起来太丑了。
  • 你知道他们说什么,有 100 种剥猫皮的方法。 :)
  • 另一种“丑陋”的方式是:as.vector(na.action(na.omit(match(x,y))))

标签: r


【解决方案1】:

我喜欢的一个简洁的方式(我从 @joran, iirc 学到的)是:

`%nin%` <- Negate(`%in%`)
which(x %nin% y)
[1] 1 3    

【讨论】:

  • %nin% 也由Hmisc 包提供。
  • +1 给 Arun 以表扬他多跑了一英里/公里。
  • @BrandonBertelsen 我建议你接受这是正确的答案,它更笼统。
  • @RomanLuštrik 根据您的建议。
【解决方案2】:

执行%in% 返回一个真假向量。使用感叹号将使那些 Ts 和 Fs 翻转,并将所有内容包装在 which 中将为您提供索引。

> which(!x %in% y)
[1] 1 3
> which(x %in% y)
[1] 2

【讨论】:

  • 另外,如果你打算使用x[which(!x %in% y)],那么你可能更喜欢setdiff(x, y)。后者也在申请unique
  • 我可能有点偏执,但我会谦虚地建议which(!(x %in% y)),以提高可读性。
  • @Ferdinand.kraft 我同意你的观点,我也喜欢括号。然而,这也是为什么下面的 %ni% 建议如此出色的另一个原因!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多