2016-12-08 5 views
1

私は列xにある列yの単語/テキストを削除するためにgsubを使用しようとしています。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)ベクトルを値に置き換える3つの引数をとります。

パターンは単一の文字列である必要があります。交換の場合も同様です。複数の値に対して開いている関数の唯一の部分はベクトルです。このためベクトル化されています。

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

パターン引数がベクトル化されていないが、我々はタスクを完了するために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]]動作しますか?機能は、私たちのために、他の人の長さに等しくなるまで「repl」を繰り返すことに気づいた。

+0

こんにちは!これは動作しますが、同じ行からxを削除するだけです。したがって、列yの行番号2に "b"が含まれ、列xの行1に "b"が含まれている場合は削除されません。そのための解決法はありますか? – Aanna

+0

'gsub(paste(df $ x、collapse =" | ")、" "、df $ y)' –

+0

お試しください!これはまさに私が探していたものです! – Aanna

関連する問題