unique()
entfernt doppelte Elemente eines Vektors und dupliziert Zeilen eines Arrays.is.element() für mehr als eine Variable
, %in%
und match()
funktioniert nur auf Vektoren (oder NULL).
Gibt es Wertevergleichsoperationen für mehrere Variablen? (z. B. Zeilen eines Arrays)
Meine aktuelle Problemumgehung ist dies. Es ist nicht sehr elegant, und es ist offensichtlich empfindlich für "_" -Matching.
match.multiple <- function (x, table, nomatch = NA_integer_, incomparables = NULL) {
x_vector <- apply(x, 1, paste, collapse="_")
table_vector <- apply(table, 1, paste, collapse="_")
match(x_vector, table_vector, nomatch, incomparables)}
is.element.multiple <- "%in.multiple%" <- function (el, set) match.multiple(el, set, 0) > 0
Edit: Hinzufügen eines reproduzierbaren Beispiel
können sagen, dass Sie ein Auto kaufen wollen, die eine gleiche Anzahl von Vorwärtsgängen und Vergasern hat. Es kann 1-Stück, 2-Stück usw. sein. Sie wissen nicht, ob die Autos, die auf dem Markt verfügbar sind (cf. mtcars
) mit Ihren Präferenzen entsprechen.
preferences <- cbind(1:8, 1:8)
available <- cbind(mtcars$gear, mtcars$carb)
So haben Sie eine passende für beide Variablen: Getriebe und Vergasern.
m <- match.multiple(preferences, available)
m
# [1] NA NA 12 1 NA NA NA NA
which(!is.na(m))
# [1] 3 4
Dies sind die Anzahl der Vorwärtsgänge und Vergaser, die in gleichen Mengen kommen.
willbuy <- m[!is.na(m)]
mtcars[willbuy, ]
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1: 16.4 8 275.8 180 3.07 4.07 17.40 0 0 3 3
# 2: 21.0 6 160.0 110 3.90 2.62 16.46 0 1 4 4
Und das sind Katalogeinträge für Autos, die Sie beachten sollten.
@dww Es ist nicht das Gleiche: es wird ein Spiel für 'c („A“,„C“)' in 'rbind finden (c ("A", "B"), c ("C", "D")) ' – 9877126
ok Ich habe die Frage missverstanden. Dachte, du wolltest ein Objekt in mehreren Objekten finden.Anscheinend möchten Sie auch das Auftreten einer Liste als Teilmenge innerhalb eines Arrays oder einer Liste von Listen testen. Möglich, die Frage zu bearbeiten, um dies deutlicher zu machen? – dww
@dww Ich möchte keine Listen in meine Frage aufnehmen - es macht es nur komplizierter. Aber ich möchte es klarstellen. ** Ich möchte Reihen einer Matrix mit Reihen einer anderen Matrix zusammenbringen. ** – 9877126