2012-04-09 4 views
1

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.

Antwort

3

Sie machen dies viel zu kompliziert:

apply(test.answers,1,function(x){all(x[-1] == rep(3,6))}) 
+0

Danke, diese Lösung funktioniert super! Ja, klar, ich habe es zu kompliziert gemacht. – DartPrivateer

Verwandte Themen