2017-06-21 7 views
1

Ich habe einen zweispaltigen Datenrahmen, wobei die erste Spalte eine Zahl ist, und die zweite Spalte enthält eine Liste der Forschungskategorien. Eine reduzierte Version meiner Daten:Entfernen Sie doppelte Wörter aus Zellen in R

aa <- data.frame(a=c(1:4),b=c("Fisheries, Fisheries, Geography, Marine Biology", 
"Fisheries", "Marine Biology, Marine Biology, Fisheries, Zoology", "Geography")) 

Ich möchte Spalte b in eine eindeutige Liste von Elementen, das heißt, entfernen Sie die Duplikate konvertieren, so dass das Endergebnis ist

a  b 
    1  Fisheries, Geography, Marine Biology 
    2  Fisheries 
    3  Marine Biology, Fisheries, Zoology 
    4  Geography 

Ich bin in der Lage zu tun Sie dies für einzelne Elemente der Liste, zum Beispiel mit unique (unlist (strsplit (aa [1]))) ABER nur für einzelne Elemente, nicht die gesamte Spalte (andernfalls gibt es eine einzige eindeutige Liste für die gesamte Spalte). Ich kann nicht herausfinden, wie das für die gesamte Liste zu tun ist, ein Element nach dem anderen. Vielleicht mit lapply und schreibe meine eigene Funktion für * unique (unlist (strsplit()))?

Vielen Dank!

+1

So etwas wie dies funktionieren wird: 'sapply (strsplit (as.character (aa $ b) " "), Funktion (x) Paste (unique (x), Kollaps =","))' . – lmo

+0

Das funktioniert! Perfekt! Danke vielmals. –

Antwort

0

Dies sollte für Sie arbeiten.

aa <- data.frame(a=c(1:4),b=c("Fisheries, Fisheries, Geography, Marine Biology", 
           "Fisheries", "Marine Biology, Marine Biology, Fisheries, Zoology", "Geography")) 

aa$b <- sapply(aa$b, function(x) paste(unique(unlist(str_split(x,", "))), collapse = ", ")) 
+0

Hey! Du bist der beste! Ich musste zuerst aa $ b in Zeichen umwandeln (war ein Faktor), aber dann war es der Trick! Super - vielen Dank. –

Verwandte Themen