Dalam matlab ada cara untuk mencari nilai dalam satu vektor tetapi tidak di vektor lainnya.
sebagai contoh:
x <- c(1,2,3,4)
y <- c(2,3,4)
apakah ada fungsi yang akan memberi tahu saya bahwa nilai x
yang bukan dalam y
adalah 1?
Anda dapat menggunakan fungsi setdiff () (set difference):
> setdiff(x, y)
[1] 1
setdiff(x,y)
dansetdiff(y,x)
tidak sama.Iya. Untuk vektor, Anda cukup menggunakan
%in%
operator atauis.element()
fungsi.> x[!(x %in% y)] 1
Untuk matriks, ada banyak perbedaan pendekatan.
merge()
mungkin yang paling lurus ke depan. Saya sarankan melihat pertanyaan ini untuk skenario itu .sumber
File bantuan di R untuk setdiff, union, intersect, setequal, dan is.element memberikan informasi tentang fungsi set standar di R.
setdiff(x, y)
mengembalikan elemenx
yang tidak dalamy
.Seperti disebutkan di atas, ini adalah perbedaan asimetris. Jadi contohnya:
> 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
sumber
x[is.na(match(x,y))]
sumber
setdiff()
adalah fungsi yang rumit karena keluarannya bergantung pada urutan masukan. Sebagai gantinya, Anda dapat menulis fungsi sederhana yang melakukan kebalikan dariintersect
. Ini jauh lebih baik.>difference <- function(x, y) { c(setdiff(x, y), setdiff(y, x)) } #Now lets test it. >x <- c(1,2,3,4) >y <- c(2,3,4,5) >difference(x,y) [1] 1 5
sumber
Jika:
x <- c(1,2,3,4) y <- c(2,3,4)
Salah satu ekspresi berikut:
setdiff(x, y) x[!(x %in% y)] x[is.na(match(x,y))] x[!(is.element(x,y))]
akan memberi Anda jawaban yang benar
[1] 1
, jika tujuannya adalah untuk menemukan nilai / karakter di dalamnyax
, yang tidak ada di dalamnyay
.Namun, menerapkan ekspresi di atas bisa rumit dan dapat memberikan hasil yang tidak diinginkan tergantung pada sifat vektor, dan posisi x dan y dalam ekspresi tersebut. Misalnya, jika:
x <- c(1,1,2,2,3,4) y <- c(2,3,4)
dan tujuannya hanya untuk menemukan nilai / karakter unik di dalamnya
x
, yang tidak ada di dalamy
atau sebaliknya. Menerapkan salah satu ekspresi berikut akan tetap memberikan jawaban yang benar[1] 1
:Terima kasih atas kontribusi Jeromy Anglim
ATAU:
difference <- function(x, y) { c(setdiff(x, y), setdiff(y, x)) } difference(y,x)
Terima kasih atas kontribusi Workhouse
sumber