Rで自作関数:replace_cells_containing

「特定のパターン(文字列)が含まれている場合、そのセル全体を指定した値(NAや別の文字列)に置き換える」 関数です

関数名: replace_cells_containing

# 関数の定義
replace_cells_containing <- function(data, pattern_str, replace_val) {
  # データフレームのコピーを作成(元のデータを変更しないため)
  df_result <- data

  # 全ての列に対して処理を実行
  # lapplyを使うことで列ごとにループ処理を行います
  df_result[] <- lapply(df_result, function(x) {
    # 文字列型の列のみを対象にする
    if (is.character(x)) {
      # greplで「特定の文字列(pattern_str)」が含まれるか判定
      # 該当する箇所のインデックスを取得し、replace_val を代入
      x[grepl(pattern_str, x)] <- replace_val
    }

    return(x)
  })

  return(df_result)
}

使用例

データの準備

# テスト用データフレーム
df <- data.frame(
  ID = 1:3,
  Name = c("apple", "pineapple", "banana"),
  Status = c("ok", "error: 404", "warning: low"),
  stringsAsFactors = FALSE
)

cat("--- 元のデータ ---\n")
print(df)
--- 元のデータ ---
  ID      Name       Status
1  1     apple           ok
2  2 pineapple   error: 404
3  3    banana warning: low

関数を実行(NAへの置換)

error」という文字が含まれるセルを NA に置き換えます。

# 引数:データフレーム, 検索する文字, 置換後の値
df_na <- replace_cells_containing(df, "error", NA)

cat("--- 'error' を含むセルを NA に置換 ---\n")
print(df_na)
--- 'error' を含むセルを NA に置換 ---
  ID      Name       Status
1  1     apple           ok
2  2 pineapple         <NA>
3  3    banana warning: low

関数を実行(別の文字列への置換)

apple」という文字が含まれるセルを "FRUIT" という文字列に置き換えます。

df_str <- replace_cells_containing(df, "apple", "FRUIT")

cat("--- 'apple' を含むセルを 'FRUIT' に置換 ---\n")
print(df_str)
--- 'apple' を含むセルを 'FRUIT' に置換 ---
  ID   Name       Status
1  1  FRUIT           ok
2  2  FRUIT   error: 404
3  3 banana warning: low

以上です。