%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%.
我認為有兩種方法:
#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% 運算子是如何作業的,以及為什么第二種方式給了我錯誤的結果?
首先十分感謝
問候
uj5u.com熱心網友回復:
給出了答案,但更詳細一些只需查看 %in% 結果
df$col1 %in% myvector
# [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
當您對 df 進行子集化并保留 TRUE 值,第 5、9、12、13 行時,上述方法是正確的
相對
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 作為好
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364194.html
