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 yist, 1 ist?
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 yist, 1 ist?
Antworten:
Ja. Für Vektoren können Sie einfach den %in%Operator oder die is.element()Funktion verwenden.
> x[!(x %in% y)]
1
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 .
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ück x, die nicht in sind y.
Wie oben 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
x[is.na(match(x,y))]
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 bewirkt intersect. Das ist weitaus 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
Wenn:
x <- c(1,2,3,4)
y <- c(2,3,4)
Jeder dieser Ausdrücke:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
gibt Ihnen die richtige Antwort [1] 1, wenn das Ziel darin besteht, die Werte / Zeichen in zu finden, die in xnicht vorhanden sind y.
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:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
und das Ziel ist nur, die eindeutigen Werte / Zeichen in zu finden x, die in nicht vorhanden sind yoder umgekehrt. Wenn Sie einen dieser Ausdrücke anwenden, erhalten Sie immer noch die richtige Antwort [1] 1:
union(setdiff(x, y), setdiff(y, x))
Dank des Beitrags von Jeromy Anglim
ODER:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Dank des Beitrags von Workhouse
setdiff(x,y)undsetdiff(y,x)sind nicht gleich.