看来,应该选择每一行,其中y是值之一在x(?)所以在这个例子中,11和12出现在“月”中的所有情况。
如果您不了解查看示例的行为,请自行尝试。例如,你可以这样做:
> c(1,2,3) %in% c(2,4,6)
[1] FALSE TRUE FALSE
所以看起来%in%
为您提供了对应于每个第一个参数(一%in%
之前)项目的TRUE
和FALSE
值的向量。让我们尝试另:
> 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
?
我倾向于将%y中的x%读为“x在y中”。 '%in%'操作符是'match'的有用包装器,其中y是'match'的“table”参数。也就是说,y是用于比较的一组值。如果一个x的元素在y中,'%in%'操作符返回一个逻辑向量x的长度为TRUE。类似地,'match'返回长度为x的inteder向量与表(y)中x的位置(索引)。 – lmo
如果您熟悉SQL,那么这与sql语句相同:'select * from from flights where month in(11,12)'。 –
@lmo我认为这是一个混淆的地方,尽管......与具有多个值的向量可以“在”具有2个值的向量中是违反直觉的。如果你将它看作“x的元素在y中”,那么理解x中的所有x不必包含在y中会容易一些。 – Caleb