Ich versuche, eine Reihe von Zeilen und einen festen Vektor in R zu vergleichen und sie als identisch (TRUE) oder nicht identisch (FALSE) zu kennzeichnen. Stellen Sie sich das Problem vor, indem Sie eine Reihe von Testantworten mit einem Antwortschlüssel vergleichen.Vergleiche Zeilen/Vektoren für die Identität in R mit BY oder APPLY?
ich in der Lage gewesen, um den Vergleich zu bekommen mit einer Schleife zu arbeiten und das Paket vergleichen, aber ich habe es nicht gelungen, es zu kopieren effizientere Methoden wie BY, GILT oder DDPLY mit:
test.answers <- as.data.frame(rbind(c(ID="A",rep(3, 6)), c(ID="B",6:1), c(ID="C",1:6)))
library(compare)
# Compare using a loop
for (i in 1:length(test.answers))
{
test.answers$Static1[i] <- isTRUE(compare(as.data.frame(rbind(rep(3, 6))),
test.answers[i,2:7], allowAll=TRUE))
}
test.answers # This is correct!
staticfn <- function(x)
{
isTRUE(compare(as.data.frame(rbind(rep(3, 6))),
test.answers[2:7], allowAll=TRUE))
}
# Compare using APPLY
test.answers$Static2 <- apply(test.answers, 1, staticfn)
test.answers # This is incorrect!
# Compare using BY
test.answers$Static3 <- by(test.answers, test.answers$ID, staticfn)
test.answers # This is incorrect!
# Compare using DDPLY
library(plyr)
test.answers <- ddply(test.answers, .(ID), { staticfn })
test.answers # This is incorrect!
# Results
ID V2 V3 V4 V5 V6 V7 Static1 Static2 Static3
1 A 3 3 3 3 3 3 TRUE TRUE TRUE
2 B 6 5 4 3 2 1 FALSE TRUE TRUE
3 C 1 2 3 4 5 6 FALSE TRUE TRUE
ID V1
1 A TRUE
2 B TRUE
3 C TRUE
I Ich wäre dankbar, wenn jemand vorschlagen könnte, warum APPLY und DDPLY mir ein anderes Ergebnis geben als die Schleife, und wie ich eine dieser Funktionen modifizieren könnte, um die Verwendung einer Schleife zu vermeiden.
Danke, diese Lösung funktioniert super! Ja, klar, ich habe es zu kompliziert gemacht. – DartPrivateer