gpt4 book ai didi

r - 无法理解 %in% 的解释

转载 作者:行者123 更新时间:2023-12-04 09:34:49 25 4
gpt4 key购买 nike

我无法理解 %in%。在 Hadley Wickham 的书“R for data science”第 5.2.2 节中它说,“这个问题的一个有用的简写是 x %in% y。这将选择 x 为 1 的每一行y 中的值。”然后给出这个例子:

 nov_dec <- filter(flights, month %in% c(11, 12))

但是,当我查看语法时,它似乎应该选择 y 是 x(?) 中的值之一的每一行所以在示例中,出现 11 和 12 (y) 的所有情况在“月”(x)中。

?"%in%" 并没有让我更清楚。显然我遗漏了一些东西,但是有人可以详细说明这个功能是如何工作的吗?

最佳答案

It appears that it should be selecting every row where y is one of the values in x(?) So in the example, all the cases where 11 and 12 appear in "month."

如果您无法通过查看示例来理解行为,请自己尝试一下。例如,您可以这样做:

> c(1,2,3) %in% c(2,4,6)
[1] FALSE TRUE FALSE

所以看起来 %in% 为您提供了与第一个参数中的每个项目相对应的 TRUEFALSE 值的向量(%in% 之前的那个)。让我们尝试另一个:

> c(1,2,3) %in% c(2,4,6,8,10,12,1)
[1] TRUE TRUE FALSE

这证实了这一点:如果第一个参数中的第一项在第二个参数中的任何位置找到,则返回向量中的第一项为 TRUE,依此类推。将该结果与您使用 match() 得到的结果进行比较:

> match(c(1,2,3), c(2,4,6,8,10,12,1))
[1] 7 1 NA

所以 match()%in% 之间的区别在于前者为您提供了第一个匹配项的第二个参数中每个项目的实际位置第一个参数,而 %in% 给你一个逻辑向量,告诉你第一个参数中的每个项目是否出现在第二个参数中。

在 Wickham 的书示例的上下文中,month 是一个值向量,表示发生各种航类的月份。因此,为了争论,类似:

> month <- c(2,3,5,11,2,9,12,10,9,12,8,11,3)

使用 %in% 运算符可以将该向量转换为问题的答案这次航类是在第 11 个月还是第 12 个月? 如下所示:

> month %in% c(11,12)
[1] FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
[13] FALSE

它为您提供一个逻辑向量,即真/假值列表。 filter() 函数使用该逻辑向量从 flights 表中选择相应的行。 filter%in% 一起使用可以回答问题第 11 个月或第 12 个月发生的所有航类是什么?

如果你把 %in% 转过来问:

> c(11,12) %in% month
[1] TRUE TRUE

你真的只是在问第 11 个月和第 12 个月是否有航类?

我可以想象,问一个大向量是否“在”一个只有两个值的向量可能看起来很奇怪。考虑将 x %in% y 读取为 x 中的每个值是否也在 y 中?

关于r - 无法理解 %in% 的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com