【问题标题】:Can someone explain the order of arguments for %in% in R software?有人可以解释 R 软件中 %in% 的参数顺序吗?
【发布时间】:2020-08-29 04:59:54
【问题描述】:

“gapminder”是一个数据集,其中包含每个国家和每年的生育率和 GDP 等变量。我想访问并比较土耳其和斯里兰卡在 2015 年的生育率。

library(dslabs)
data(gapminder)

当我使用 %in% 时,我如何知道哪个参数先出现?在我的 R 基础课程中,有人解释说,首先我们编写我们要查找的内容,然后是我们在其中搜索它的池。所以在我的例子中,我们在所有国家中寻找斯里兰卡和土耳其。代码应该是

gapminder %>%
  filter(year == 2015 & c("Sri Lanka", "Turkey") %in% country)

但这是错误的,并且返回的不是所提供的代码:

gapminder %>%
  filter(year == 2015 & country %in% c("Sri Lanka", "Turkey"))

然而文档清楚地指出: “x %in% 表,x = 要匹配的值(对于我们土耳其、斯里兰卡),表 = 要匹配的值(国家列表)”。为什么我的第一个代码是错误的呢?谁能给我一个简单的规则,先写哪个论点?

【问题讨论】:

  • c("Sri Lanka", "Turkey") %in% country 返回一个 2 的布尔值,即斯里兰卡或土耳其是否在国内,这不适用于您的 data.frame
  • 你需要country %in% c("Sri Lanka", "Turkey"),因为这是一个与你的data.frame一样长的布尔值

标签: r data-visualization dataset matching function


【解决方案1】:

%in% 查找一个对象的元素是否存在于另一个元素中。它在内部使用match 并返回逻辑(布尔)值。 例子:

a <- c("C", "A", "B")
b <- c("A", "B")

a %in% b
# [1] FALSE  TRUE  TRUE
b %in% a
# [1] TRUE TRUE
match(a, b)
# [1] NA  1  2
match(b, a)
# [1] 2 3

【讨论】:

  • 谢谢,这结合 StupidWolf 所说的回答了我的问题。
【解决方案2】:

```dplyr,我相信所有tidyverse 系列软件包都将 R 数据帧作为参数。确保 gapminder 是一个 R 数据框。您可以使用class(gapminder) 来检查对象类型。除此之外,您的代码是正确的并且应该产生所需的输出。至于参数的顺序,%&gt;% 之后的第一个函数将采用%&gt;% 之前的对象。在这种情况下,filter 函数的第一个参数是gapminder。这应该为您提供 2015 年的数据以及该国是斯里兰卡和土耳其的位置


data(gapminder)
gapminder %>%
  filter(year == 2015 & country %in% c("Sri Lanka", "Turkey"))

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2013-09-20
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多