2016-07-13 6 views
0

Ich kann nicht für das Leben von mir herauszufinden, wo der einfache Fehler in meiner for-Schleife die gleichen Analysen über mehrere Datenrahmen und Ausgabe durchführen Der neue Datenrahmen jeder Iteration verwendet die Variable, die zusammen mit einer zusätzlichen Zeichenfolge verwendet wird, um den neuen Datenrahmen zu identifizieren.For Schleife über die Liste der Datenrahmen und neue Datenrahmen aus jeder Iteration mit Variablennamen

Hier ist mein Code:

john und jane sind 2-Datenrahmen unter vielen ich Schleife bin der Hoffnung, über und vergleichen zu bcm doppelte Ergebnisse in Zeilen zu finden.

x <- list(john,jane) 

for (i in x) { 
    test <- rbind(bcm,i) 
    test$dups <- duplicated(test$Full.Name,fromLast=T) 
    test$dups2 <- duplicated(test$Full.Name) 
    test <- test[which(test$dups==T | test$dups2==T),] 
    newname <- paste("dupl",i,sep=".") 
    assign(newname, test) 
} 

Bis jetzt kann ich entweder bekommen die Namensgebung richtig zu arbeiten, ohne die x Daten oder die Schleife einschließlich korrekt abzuschließen, ohne richtig die neuen Datenrahmen zu benennen.

beabsichtigtes Ergebnis: Ich bin die Hoffnung, neuen Datenrahmen dupl.john und dupl.jane zu erstellen um zu zeigen, welche Zeilen im Vergleich zu bcm dupliziert werden.

Ich verstehe, dass lapply() könnte besser zu bedienen und bin sehr offen für diese Form der Lösung. Ich konnte nicht herausfinden, wie ich es benutzen konnte, um mein Problem zu lösen, also wandte ich mich an die bekanntere for-Schleife.


EDIT:

Sorry, wenn ich nicht mehr klar zu sein bin. Ich habe ungefähr 13 Datenrahmen insgesamt, die ich dieselbe Analyse ausführen möchte, um die doppelten Zeilen in $Full.Name zu finden. Ich könnte die ersten 4 Zeilen meiner Schleife und dann dupl.john <- test 13 Mal (für jeden Datenrahmen), aber ich versuche absichtlich eine For-Schleife oder schreiben, um mehr Wissen in R zu gewinnen, und weil ich sicher bin, dass es effizienter ist .

+0

Versuchen Sie 'test <- rbind (bcm, get (i))'. In der Tat sind einige "lapply" vielleicht bequem. –

Antwort

1

Wenn ich auf der Grundlage Ihres beabsichtigten Ergebnisses richtig verstehe, könnte die Verwendung der match_df eine Option sein.

library(plyr) 
dupl.john <- match_df(john, bcm) 
dupl.jane <- match_df(jane, bcm) 

dupl.john und dupl.jane werden beiden Datenrahmen sein und beide werden die Zeilen, die in diesem Datenrahmen und BCM sind. Wollen Sie das erreichen?

nach dem ersten Kommentar EDITED Jetzt

library(plyr) 
l <- list(john, jane) 
res <- lapply(l, function(x) {match_df(x, bcm, on = "Full.Name")}) 
dupl.john <- as.data.frame(res[1]) 
dupl.jane <- as.data.frame(res[2]) 

, res wird mit den Spielen eine Liste des Datenrahmen hat, basierend auf der Spalte „Full.Name“.

+0

Tut mir leid, wenn ich nicht klarer bin. Ich habe ungefähr 13 Datenrahmen insgesamt, die ich dieselbe Analyse ausführen möchte, um die doppelten Zeilen in $ Full.Name zu finden. Ich könnte die ersten 4 Zeilen meiner Schleife und dann 'dupl.john <- test '13 mal (für jeden Datenrahmen) machen, aber ich versuche absichtlich eine for-Schleife oder' lapply() 'zu schreiben, um mehr Wissen zu erlangen R und weil ich sicher bin, dass es effizienter ist. – medavis6

+0

Ok, ich habe gerade die erste Lösung bearbeitet. –

+0

Danke für die Bearbeitung. Dies ist mehr in Richtung auf das, was ich versuche zu tun. Jedoch ist meine letzte Sache, die ich versuche durchzuarbeiten, ein Problem, das ich wahrscheinlich mit meiner Erklärung (oder dem Fehlen davon) verursacht habe.Ich möchte alle Zeilenübereinstimmungen durch '$ Full.Name' behalten. Also experimentiere ich gerade mit 'join()' und nicht mit 'match_df()'. Wenn Sie Zeit haben, sich damit zu beschäftigen, wird es sehr geschätzt. Ansonsten kann ich Ihre Antwort aufgrund der Formulierung meiner ursprünglichen Frage als Antwort akzeptieren. – medavis6

Verwandte Themen