如何在 R 中使用 '%in%' 运算符?
How to use '%in%' operator in R?
自从我知道 %in%
运算符以来,我已经使用它很长时间了。
但是,我还是不明白它是如何工作的。至少,我认为我知道如何,但我总是怀疑元素的顺序。
这里有一个例子:
这是我的数据框:
df <- data.frame("col1"=c(1,2,3,4,30,21,320,123,4351,1234,3,0,43), "col2"=rep("something",13))
这是它的样子
> df
col1 col2
1 1 something
2 2 something
3 3 something
4 4 something
5 30 something
6 21 something
7 320 something
8 123 something
9 4351 something
10 1234 something
11 3 something
12 0 something
13 43 something
假设我有一个数值向量:
myvector <- c(30,43,12,333334,14,4351,0,5,55,66)
我想检查向量中的所有(或部分)数字是否都在前一个数据框中。为此,我总是使用 %in%
.
我认为有 2 种方法:
#common in both: 30, 4351, 0, 43
# are the numbers from df$col1 in my vector?
trial1 <- subset(df, df$col1 %in% myvector)
# are the numbers of the vector in df$col1?
trial2 <- subset(df, myvector %in% df$col1)
这两种方法对我来说都很有意义,它们应该给出相同的结果。但是,只有trial1的结果还可以。
> trial1
col1 col2
5 30 something
9 4351 something
12 0 something
13 43 something
我不明白的是为什么第二种方法给我一些常用数字和一些不在向量中的数字。
col1 col2
1 1 something
2 2 something
6 21 something
7 320 something
11 3 something
12 0 something
有人可以向我解释一下 `%in% 运算符是如何工作的以及为什么第二种方法会给我错误的结果吗?
非常感谢
此致
答案已给出,但更详细一点只需查看 %in% 结果
df$col1 %in% myvector
# [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
以上是正确的,因为您对 df 进行子集化并保留第 5、9、12、13 行的 TRUE 值
对比
myvector %in% df$col1
# [1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
当您对 df 进行子集化并告诉您保留 1、2、6、7 并且这里的长度仅为 10 时,它会再次将 11、12、13 回收为 TRUE、TRUE、FALSE,因此您会得到 11 和你的子集中也有 12 个
自从我知道 %in%
运算符以来,我已经使用它很长时间了。
但是,我还是不明白它是如何工作的。至少,我认为我知道如何,但我总是怀疑元素的顺序。
这里有一个例子:
这是我的数据框:
df <- data.frame("col1"=c(1,2,3,4,30,21,320,123,4351,1234,3,0,43), "col2"=rep("something",13))
这是它的样子
> df
col1 col2
1 1 something
2 2 something
3 3 something
4 4 something
5 30 something
6 21 something
7 320 something
8 123 something
9 4351 something
10 1234 something
11 3 something
12 0 something
13 43 something
假设我有一个数值向量:
myvector <- c(30,43,12,333334,14,4351,0,5,55,66)
我想检查向量中的所有(或部分)数字是否都在前一个数据框中。为此,我总是使用 %in%
.
我认为有 2 种方法:
#common in both: 30, 4351, 0, 43
# are the numbers from df$col1 in my vector?
trial1 <- subset(df, df$col1 %in% myvector)
# are the numbers of the vector in df$col1?
trial2 <- subset(df, myvector %in% df$col1)
这两种方法对我来说都很有意义,它们应该给出相同的结果。但是,只有trial1的结果还可以。
> trial1
col1 col2
5 30 something
9 4351 something
12 0 something
13 43 something
我不明白的是为什么第二种方法给我一些常用数字和一些不在向量中的数字。
col1 col2
1 1 something
2 2 something
6 21 something
7 320 something
11 3 something
12 0 something
有人可以向我解释一下 `%in% 运算符是如何工作的以及为什么第二种方法会给我错误的结果吗?
非常感谢
此致
答案已给出,但更详细一点只需查看 %in% 结果
df$col1 %in% myvector
# [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
以上是正确的,因为您对 df 进行子集化并保留第 5、9、12、13 行的 TRUE 值
对比
myvector %in% df$col1
# [1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
当您对 df 进行子集化并告诉您保留 1、2、6、7 并且这里的长度仅为 10 时,它会再次将 11、12、13 回收为 TRUE、TRUE、FALSE,因此您会得到 11 和你的子集中也有 12 个