99 Stimmen

Wie kann man feststellen, was in einem Vektor enthalten ist und was nicht?

In Matlab gibt es eine Möglichkeit, die Werte in einem Vektor zu finden, aber nicht in einem anderen.

zum Beispiel:

x <- c(1,2,3,4)
y <- c(2,3,4)

gibt es eine Funktion, die mir sagt, dass der Wert in x die nicht in y ist 1?

138voto

Xela Punkte 1334

Können Sie die Funktion setdiff() (set difference) verwenden:

> setdiff(x, y)
[1] 1

46 Stimmen

Aufgepasst: setdiff(x,y) y setdiff(y,x) sind nicht dasselbe.

64voto

Shane Punkte 95376

Ja. Für Vektoren können Sie einfach die %in% Betreiber oder is.element() Funktion.

> x[!(x %in% y)]
1

Für eine Matrix gibt es viele unterschiedliche Ansätze. merge() ist wahrscheinlich die einfachste. Ich schlage vor diese Frage für dieses Szenario zu prüfen .

32voto

Jeromy Anglim Punkte 32121

Die Hilfedatei in R für setdiff, union, intersect, setequal, und is.element bietet Informationen zu den Standardmengenfunktionen in R.

setdiff(x, y) gibt die Elemente von x die sich nicht in y .

Wie bereits erwähnt, handelt es sich um einen asymmetrischen Unterschied. Also zum Beispiel:

> 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

12voto

George Dontas Punkte 28585
x[is.na(match(x,y))]

8voto

Workhorse Punkte 1286

setdiff() ist eine schwierige Funktion, da die Ausgabe von der Reihenfolge der Eingabe abhängt. Sie können stattdessen eine einfache Funktion schreiben, die genau das Gegenteil von intersect . Das ist viel besser.

>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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X