有没有替代"重估"使用dplyr时plyr的功能?

时间:2016-04-14 06:53:07

标签: r string dplyr plyr

我是revalue函数的粉丝,plyr用于替换字符串。它简单易记。

但是,我已将新代码迁移到dplyr,但似乎没有revalue功能。 dplyr之前用revalue完成的事情是什么被接受的成语?

4 个答案:

答案 0 :(得分:24)

有一个recode函数,从 dplyr 版本dplyr_0.5.0开始,与 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参数。

答案 1 :(得分:3)

我们可以使用chartr

中的base R执行此操作
chartr("ac", "AC", x)

数据

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

答案 2 :(得分:2)

我想评论@aosmith的答案,但缺乏声誉。如今,dplyr的{​​{1}}函数的默认设置似乎是不影响未指定的级别。

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_

答案 3 :(得分:0)

我发现一个方便的替代方法是data.tables的mapvalues函数 e.g

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