ich eine data.frame habe „dat“ und einen numerischen Vektor „test“:Vektor Vergleich der Reihe der Teilmenge in einem data.frame
code <- c("A22", "B15", "C03")
v.1 <- 1:3
v.2 <- 3:1
v.3 <- c(2, NA, 2)
bob <- c("yes", "no", "no")
dat <- data.frame(code, v.1, v.2, v.3, bob, stringsAsFactors = FALSE)
test <- c(3, 1, 2)
Ich mag die Zeile in der data.frame zu finden, wo die zweite bis vierte Spalte ("v.1", "v.2", "v.3") enthalten die gleichen Werte wie der Vektor in der gleichen Reihenfolge und geben den Wert aus der "code" -Spalte (in dieser Fall "C03").
Ich versuchte
dat[dat[, 2:4] == test]$code
und
which(apply(dat, 1, function(x) all.equal(dat[, 2:4], test)) == FALSE)
von denen beide nicht funktionieren.
ich eine Lösung mit Basis R.
row.names (Teilmenge (dat, dat $ v.1 == Test [1] & dat $ v.2 == test [2] & dat $ v.3 == test [3])) gibt die gewünschten Zeilen zurück. Wenn Sie den "code" -Wert für diese Zeilen wissen möchten, fügen Sie zu subset() function select = "code" hinzu. Es hilft dir, was? –
@MarioM. Das funktioniert, aber für diese Lösung müsste ich alle Spaltennamen aus dem data.frame und alle Indizes für den Vektor eingeben, was für große Datenmengen etwas unhandlich ist. –
, damit es mit Ihrer 2. Option funktioniert: 'which (apply (dat [, 2: 4], 1, Funktion (x) alle (x == Test))' – Cath