【问题标题】:What is the equivalent of SQL's IN keyword in R?什么是 R 中 SQL 的 IN 关键字的等价物?
【发布时间】:2014-09-08 19:20:47
【问题描述】:

在 SQL 中,如果您使用 IN 查找特定变量(列)的多个值,则可以轻松避免多个 OR 条件。 例如:

SELECT * FROM colors WHERE color in ('Red', 'Blue', 'Green')

我将如何在 R 中做到这一点? 我目前不得不这样做:

shortlisted_colors <- subset(colors, color == 'Red' | color == 'Blue' | color == 'Green')

有什么更好的方法?

【问题讨论】:

  • 使用函数%in%

标签: sql r language-comparisons


【解决方案1】:
shortlisted_colors <- subset(colors, color %in% c('Red', 'Blue', 'Green'))

【讨论】:

  • 当我做一个总结(入围颜色)时,它仍然显示我对其他颜色的观察,但它们的计数显示为 0。
  • 如何删除其他颜色的行?
  • 听起来colorfactor 变量而不是character 变量。如果colors 是您的data.frame,您可以使用colors$color &lt;- as.character(colors$color),这应该可以解决问题。
  • 谢谢。有效。 as.character 在这里做什么?任何关于这方面的好文档也会有所帮助。
  • 当然没问题,它只是将您的列color 的类从factor 更改为character。在控制台中输入?as.character?as.factor 并阅读帮助文件;它们是 R 中的两个不同的对象类。虽然它们在表面上看起来相同,但它们具有不同的属性。
【解决方案2】:

我想可能很难搜索“in”,但答案是“%in%”。搜索也可能很困难,因为in 是 R 中的保留字,因为它在 for-loops 的迭代器规范中使用:

subset(colors, color %in% c('Red' ,'Blue','Green') )

见:

?match
?'%in%'   # since you need to quote names with special symbols in them

在该页面上说明了使用“%”符号将用户定义的中缀函数名称括起来,但随后您将了解@hadley 如何在他的@@ 987654325@-包裹。如果您在 SQL 方面有扎实的背景,那么回过头来看看 dplyr 提供的内容应该会非常令人满意。我知道dplyr-functions 在很多情况下确实是 SQL 操作的前端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多