【问题标题】:Replacing empty values with plyr::revalue用 plyr::revalue 替换空值
【发布时间】:2018-02-23 10:49:58
【问题描述】:

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

我为此使用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

我知道One of the factor's levels is an empty string; how to replace it with non-missing value? 的问题有一个公认的答案,但我正在寻找一个优雅的单行字,本着 tidyverse 的精神。

存在吗?

【问题讨论】:

  • 也许像replace(x, x == '', NA) %>% plyr::revalue(var.replace)
  • 在阅读时使用na.strings 不是更容易,例如"""d"
  • @akrun 我不能,因为数据库很烂,空字符串有时是NA,有时是0
  • 但是如果你用na.strings将empty设置成NA,那么重估0不是更容易吗?

标签: r dplyr plyr


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Akrun 的回答让我明白了!碰巧你只需要省略名称为空的键:

    > 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)
    

    【讨论】:

    • 这样更好!我们都在追逐""
    【解决方案3】:

    我们可以使用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"
    

    【讨论】:

    • 有趣的解决方案。阿克伦处于最佳状态。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多