28
df <- structure(list(x = 1:10, time = c(0.5, 0.5, 1, 2, 3, 0.5, 0.5, 
1, 2, 3)), .Names = c("x", "time"), row.names = c(NA, -10L), class = "data.frame")


df[df$time %in% c(0.5, 3), ]
##     x time
## 1   1  0.5
## 2   2  0.5
## 5   5  3.0
## 6   6  0.5
## 7   7  0.5
## 10 10  3.0

df[df$time == c(0.5, 3), ]
##     x time
## 1   1  0.5
## 7   7  0.5
## 10 10  3.0

%in%こことの違いは何==ですか?

4

3 に答える 3

29

問題はベクトルのリサイクルです。

あなたの最初の行はあなたが期待することを正確に行います。の要素が含まれていることを確認し、含まdf$timec(0.5, 3)ている値を返します。

2行目は注意が必要です。それは実際には同等です

df[df$time == rep(c(0.5,3), length.out=nrow(df)),]

これを確認するために、ベクトルを使用するとどうなるか見てみましょうrep(0.5, 10)

rep(0.5, 10) == c(0.5, 3)
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE

すべての奇数値を返す方法をご覧ください。基本的に、それはベクトルに0.5を一致させますc(0.5, 3, 0.5, 3, 0.5...)

この方法で、ベクトルを操作して一致を生成しないようにすることができます。ベクトルを取るrep(c(3, 0.5), 5)::

rep(c(3, 0.5), 5) == c(0.5, 3)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

それらはすべてFALSEです; 0.5ごとに3と一致し、その逆も同様です。

于 2013-03-12T10:01:52.990 に答える
14

df$time == c(0.5,3)

最初のものは、の形にc(0.5,3)ブロードキャストされます。次に、2つのベクトルが要素ごとに比較されます。df$timec(0.5,3,0.5,3,0.5,3,0.5,3,0.5,3)

一方で、

df$time %in% c(0.5,3)

の各要素がdf$timeセットに属しているかどうかを確認します{0.5, 3}

于 2013-03-12T10:01:36.167 に答える
6

これは古いスレッドですが、私はこの答えをどこにも見たことがなく、一部の人々に関連している可能性があります。

2つの違いのもう1つは、NA(欠落値)の処理です。

NA == NA
[1] NA
NA %in% c(NA)
[1] TRUE
于 2019-03-12T16:37:58.197 に答える