2016-12-08 102 views
1

我正在嘗試使用gsub刪除列x中的單詞/文本。R gsub從列x中的單詞中刪除單詞y

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) 

如果我運行上面的代碼,它從x列第1行只刪除文本,而不是所有行:

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

我想最終的結果是:

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

因此,第x列中的所有單詞/字母都應從列y中刪除。這可能與gsub?

+0

'df $ y < - mapply(gsub,df $ x,「」,df $ y)'可以工作 –

回答

1

通常gsub需要三個參數1)模式2)替換和3)替換值的向量。

該模式必須是單個字符串。和替換相同。向多個值開放的函數的唯一部分是向量。我們稱之爲矢量化因此。

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

pattern參數沒有向量化,但我們可以使用mapply來完成任務。

mapply和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]]) 

你可能會問,但我只有一個repl,請問repl[[2]]repl[[3]]工作?該功能注意到,對我們來說,並重復「複製」,直到它等於其他人的長度。

+0

嗨,謝謝!這是有效的,但它只會從同一行中刪除x,因此如果列y中的第2行包含「b」,並且第x列中的第1行包含「b」,那麼它不會被刪除。有沒有解決方案? – Aanna

+0

試試'gsub(粘貼(df $ x,collapse =「|」),「」,df $ y)' –

+0

謝謝!這正是我所期待的! – Aanna