In matlab gibt es eine Möglichkeit, die Werte in einem Vektor zu finden, aber nicht in dem anderen.
beispielsweise:
x <- c(1,2,3,4)
y <- c(2,3,4)
Gibt es eine Funktion, die mir sagen würde, dass der Wert in x
, der nicht in y
ist, 1 ist?
Sie können die Funktion setdiff () (Set Difference) verwenden:
> setdiff(x, y)
[1] 1
setdiff(x,y)
undsetdiff(y,x)
sind nicht gleich.Ja. Für Vektoren können Sie einfach den
%in%
Operator oder dieis.element()
Funktion verwenden.Für eine Matrix gibt es viele unterschiedliche Ansätze.
merge()
ist wahrscheinlich die direkteste. Ich schlage vor , diese Frage für dieses Szenario zu betrachten .quelle
Die Hilfedatei in R für setdiff, union, intersect, setequal und is.element enthält Informationen zu den Standard-Set-Funktionen in R.
setdiff(x, y)
gibt die Elemente zurückx
, die nicht in sindy
.Wie oben erwähnt, handelt es sich um einen asymmetrischen Unterschied. Also zum Beispiel:
quelle
quelle
setdiff()
ist eine schwierige Funktion, da die Ausgabe von der Reihenfolge der Eingabe abhängt. Sie können stattdessen eine einfache Funktion als solche schreiben, die genau das Gegenteil von bewirktintersect
. Das ist weitaus besser.quelle
Wenn:
Jeder dieser Ausdrücke:
gibt Ihnen die richtige Antwort
[1] 1
, wenn das Ziel darin besteht, die Werte / Zeichen in zu finden, die inx
nicht vorhanden sindy
.Das Anwenden der obigen Ausdrücke kann jedoch schwierig sein und je nach Art des Vektors und der Position von x und y im Ausdruck unerwünschte Ergebnisse liefern. Zum Beispiel, wenn:
und das Ziel ist nur, die eindeutigen Werte / Zeichen in zu finden
x
, die in nicht vorhanden sindy
oder umgekehrt. Wenn Sie einen dieser Ausdrücke anwenden, erhalten Sie immer noch die richtige Antwort[1] 1
:Dank des Beitrags von Jeromy Anglim
ODER:
Dank des Beitrags von Workhouse
quelle