2016-12-08 3 views
1

Ich versuche, gsub zu verwenden, um Wörter/Text in der Spalte y zu entfernen, die in Spalte x sind.R gsub entfernen Sie Wörter in der Spalte y aus den Wörtern in der Spalte x

x = c("a","b","c") 
y = c("asometext", "some, a b text", "c a text") 
df = cbind(x,y) 
df = data.frame(df) 
df$y = gsub(df$x, "", df$y) 

Wenn ich den obigen Code ausführen, es entfernt nur den Text aus Spalte x Zeile 1 und nicht alle Zeilen:

> df 
    x    y 
1 a  sometext 
2 b some, b text 
3 c  c text 

Ich möchte das Endergebnis sein:

> df 
    x    y 
1 a  sometext 
2 b  some, text 
3 c  text 

Also alle Wörter/Buchstaben aus Spalte x sollten aus der Spalte y entfernt werden. Ist das mit gsub möglich?

+0

'df $ y <- mapply (gsub, df $ x," ", df $ y)' kann funktionieren –

Antwort

1

Normalerweise gsub dauert drei Argumente 1) Muster, 2) Ersatz und 3) Vektor, um Werte zu ersetzen.

Das Muster muss eine einzelne Zeichenfolge sein. Und das gleiche für den Ersatz. Der einzige Teil der Funktion, der für mehrere Werte offen ist, ist der Vektor. Wir nennen es deshalb vektorisiert.

gsub(df$x, "", df$y) #doesn't work because 'df$x' isn't one string 

Das Muster Argument nicht vektorisiert ist, aber wir mapply die Aufgabe abzuschließen, verwenden können.

mapply und gsub (bffs)

x = c("a","b","c") 
y = c("asometext", "some, a b text", "c a text") 
repl = "" 

#We do 
mapply(gsub, x, repl, y) 

#On the inside 
gsub(x[[1]], repl[[1]], y[[1]]) 
gsub(x[[2]], repl[[2]], y[[2]]) 
gsub(x[[3]], repl[[3]], y[[3]]) 

Sie können fragen, aber ich habe nur ein repl, wie funktioniert repl[[2]] und repl[[3]] Arbeit? Die Funktion hat das für uns bemerkt und wiederholt, bis sie der Länge der anderen entspricht.

+0

Hallo danke! Das funktioniert, aber es entfernt nur das x aus der gleichen Zeile. Wenn Zeile 2 in Spalte y also "b" enthält und die Zeile 1 in Spalte x "b" enthält, wird sie nicht entfernt. Gibt es dafür eine Lösung? – Aanna

+0

Probieren Sie 'gsub (einfügen (df $ x, collapse =" | ")," ", df $ y)' –

+0

Danke! Genau das habe ich gesucht! – Aanna

Verwandte Themen