matlabには、一方のベクトルで値を検索する方法がありますが、もう一方のベクトルでは検索できません。
例えば:
x <- c(1,2,3,4)
y <- c(2,3,4)
にx
ない値y
が1であることを教えてくれる関数はありますか?
回答:
はい。ベクトルの場合は、%in%
演算子またはis.element()
関数を使用するだけです。
> x[!(x %in% y)]
1
マトリックスの場合、多くの異なるアプローチがあります。 merge()
おそらく最も簡単です。そのシナリオについては、この質問を参照することをお勧めします。
setdiff、union、intersect、setequal、およびis.elementのRのヘルプファイルは、Rの標準集合関数に関する情報を提供します。
setdiff(x, y)
にx
ない要素を返しますy
。
上記のように、これは非対称の違いです。したがって、たとえば:
> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
>
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
場合:
x <- c(1,2,3,4)
y <- c(2,3,4)
これらの式のいずれか:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
に存在しない[1] 1
値/文字を見つけることが目標である場合、正しい答えが得られます。x
y
ただし、上記の式を適用するのは難しい場合があり、ベクトルの性質、および式内のxとyの位置によっては、望ましくない結果が生じる可能性があります。たとえば、次の場合:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
目標はx
、に存在しない、y
またはその逆の一意の値/文字を見つけることだけです。これらの式のいずれかを適用しても、正しい答えが得られます[1] 1
。
union(setdiff(x, y), setdiff(y, x))
または:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Workhouseの貢献に感謝します
setdiff(x,y)
とsetdiff(y,x)
は同じではありません。