0

「Rで検索して置換する」ためのジェネリック関数を書く必要があります。次の入力を受け取る関数を作成するにはどうすればよいですか?

  • CSVファイル(またはデータフレーム)
  • 検索する文字列(例: "name@email.com")
  • 見つかった文字列を「medium」などに置き換える文字列

見つかったすべての文字列が置換文字列に置き換えられるように、CSVファイル/データフレームを書き換えますか?

4

2 に答える 2

8

これが仕事をするための簡単な関数です:

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")
于 2012-10-10T22:57:57.033 に答える
1

以下の解決策は、「完全な」一致に対して機能します。

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はこの種の操作に最適です。

于 2012-10-10T22:43:25.353 に答える