「Rで検索して置換する」ためのジェネリック関数を書く必要があります。次の入力を受け取る関数を作成するにはどうすればよいですか?
- CSVファイル(またはデータフレーム)
- 検索する文字列(例: "name@email.com")
- 見つかった文字列を「medium」などに置き換える文字列
見つかったすべての文字列が置換文字列に置き換えられるように、CSVファイル/データフレームを書き換えますか?
「Rで検索して置換する」ためのジェネリック関数を書く必要があります。次の入力を受け取る関数を作成するにはどうすればよいですか?
見つかったすべての文字列が置換文字列に置き換えられるように、CSVファイル/データフレームを書き換えますか?
これが仕事をするための簡単な関数です:
library(stringr)
replace_all <- function(df, pattern, replacement) {
char <- vapply(df, function(x) is.factor(x) || is.character(x), logical(1))
df[char] <- lapply(df[char], str_replace_all, pattern, replacement)
df
}
replace_all(iris, "setosa", "barbosa")
基本的に、データフレーム内の文字または因子であるすべての変数を識別し、str_replace_all
各列に適用します。パターンは正規表現である必要がありますが、固定文字列と一致させたい場合は、次のようにすることができます(例)
replace_all(iris, fixed("setosa"), "barbosa")
以下の解決策は、「完全な」一致に対して機能します。
dat <- data.frame(a=letters[1:10], y=letters[10:1])
apply(dat, 2, function(v, foo, bar) {v[v==foo]=bar;return(v)}, foo='a', bar='baz')
ただし、これは1を含む文字列を置き換えるものではありません。また、期待どおりに機能しない多くのエッジケースもあります。
コメントで述べたように、コマンドラインツールsed
はこの種の操作に最適です。