web-dev-qa-db-ja.com

dplyrを使用する場合、plyrの「再評価」関数の代替手段はありますか?

私はrevalue関数がplyrで文字列を置換するのが好きです。シンプルで覚えやすいです。

ただし、dplyr関数がないように見えるrevalueに新しいコードを移行しました。以前にdplyrで行ったことを行うためのrevalueで受け入れられているイディオムは何ですか?

19
fmark

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引数もあります。

25
aosmith

base Rchartrでこれを行うことができます

chartr("ac", "AC", x)

データ

x <- c("a", "b", "c")
3
akrun

@aosmithの回答についてコメントしたかったのですが、評判がありませんでした。最近のdplyrrecode関数のデフォルトは、未指定のレベルに影響を与えないようにしているようです。

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" 
2

私が便利だと思う1つの選択肢は、data.tablesのmapvalues関数です

df[, variable := mapvalues(variable, old = old_names_string_vector, new = new_names_string_vector)]
0