用 plyr::revalue 替换空值

Replacing empty values with plyr::revalue

我有一个向量,我想根据另一个向量替换其中的一些值。

我为此使用 plyr::revalue :

x = c("a", "b", "c", "d", "", "  ", "d, ", "aaaaa")
var.replace = c("d"=NA, "a"="A")
x %>%  plyr::revalue(var.replace)
#[1] "A"      "b"      "c"      NA       ""       "  "     "d, "    "aaaaa"
var.replace = c("d"=NA, "a"="A", ""=NA)
#Error: attempt to use zero-length variable name

我知道问题 中有一个可接受的答案,但我正在寻找一个优雅的单行代码,本着 tidyverse 的精神。

有吗?

我们可以使用 setNames 创建 "" 作为名称,然后执行 revalue

var.replace <- setNames(c(NA, "A", NA), c("d", "a", ""))
x %>%
    plyr::revalue(var.replace)
#[1] "A"     "b"     "c"     NA      NA      "  "    "d, "   "aaaaa"

你可以使用replace来处理空元素,然后像往常一样重新赋值,即

replace(x, x == '', NA) %>% plyr::revalue(var.replace)
#[1] "A"     "b"     "c"     NA      NA      "  "    "d, "   "aaaaa"

阿克伦的回答让我明白了!碰巧您只需要省略名称为空的键即可:

> setNames(c(NA, "A", NA), c("d", "a", ""))
#  d   a     
# NA "A"  NA 
> c("d"=NA, "a"="A", NA)
#  d   a     
# NA "A"  NA

那么,公式就变得很简单了:

var.replace = c("d"=NA, "a"="A", NA)
x %>%  revalue(var.replace)