私はrevalue
関数がplyr
で文字列を置換するのが好きです。シンプルで覚えやすいです。
ただし、dplyr
関数がないように見えるrevalue
に新しいコードを移行しました。以前にdplyr
で行ったことを行うためのrevalue
で受け入れられているイディオムは何ですか?
dplyrバージョンdplyr_0.5.0で始まるrecode
関数があり、これはplyrからのrevalue
と非常によく似ています。
recode
ドキュメントから構築された例例セクション:
set.seed(16)
x = sample(c("a", "b", "c"), 10, replace = TRUE)
x
[1] "a" "b" "a" "b" "b" "a" "c" "c" "c" "a"
recode(x, a = "Apple", b = "Bear", c = "Car")
[1] "Car" "Apple" "Bear" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
再コーディングする値の一部のみを定義すると、デフォルトで残りはNA
で埋められます。
recode(x, a = "Apple", c = "Car")
[1] "Car" "Apple" NA "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
この動作は、.default
引数を使用して変更できます。
recode(x, a = "Apple", c = "Car", .default = x)
[1] "Car" "Apple" "b" "Apple" "Car" "Apple" "Apple" "Car" "Car" "Apple"
欠損値を別の値に置き換える場合は、.missing
引数もあります。
base R
のchartr
でこれを行うことができます
chartr("ac", "AC", x)
x <- c("a", "b", "c")
@aosmithの回答についてコメントしたかったのですが、評判がありませんでした。最近のdplyr
のrecode
関数のデフォルトは、未指定のレベルに影響を与えないようにしているようです。
x = sample(c("a", "b", "c"), 10, replace = TRUE)
x
[1] "c" "c" "b" "b" "a" "b" "c" "c" "c" "b"
recode(x , a = "Apple", b = "banana" )
[1] "c" "c" "banana" "banana" "Apple" "banana" "c" "c" "c" "banana"
指定されていないすべてのレベルをNA
に変更するには、引数.default = NA_character_
を含める必要があります。
recode(x, a = "Apple", b = "banana", .default = NA_character_)
[1] "Apple" "banana" "Apple" "banana" "banana" "Apple" NA NA NA "Apple"
私が便利だと思う1つの選択肢は、data.tablesのmapvalues関数です
df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]