【问题标题】:Replace NA values by "-" in R [duplicate]用R中的“-”替换NA值[重复]
【发布时间】:2021-10-18 17:26:01
【问题描述】:

如何在下面的代码中将NA 值替换为-

library(dplyr)

output<-structure(list(date = structure(c(18808, 18810), class = "Date"), 
               ABC = c(4, 1), CDE = c(1, NA), FGH = c(6, NA)), row.names = c(NA, 
                                                                             -2L), class = "data.frame")
output<-output %>% mutate(SUM = rowSums(across(2:last_col()), na.rm = TRUE))

> output
        date ABC CDE FGH SUM
1 2021-06-30   4   1   6  11
2 2021-07-02   1  NA  NA   1

【问题讨论】:

    标签: r


    【解决方案1】:

    base R,我们可以做

    output[is.na(output)] <- "-"
    

    -输出

    > output
            date ABC CDE FGH SUM
    1 2021-06-30   4   1   6  11
    2 2021-07-02   1   -   -   1
    

    【讨论】:

    • 谢谢!对于这种情况它有效,另一个例子当我这样做时它给出了以下错误:Error: Assigned data "-" must be compatible with existing data. i Error occurred for column x Can't convert &lt;character&gt; to &lt;double&gt;. Run rlang::last_error() to see where the error occurred.你知道如何调整这个吗?
    • @CarlosJoseph 在 tidyverse 函数的情况下会有问题。但是,这里我们只使用了base R,它确实会自动更改类型
    • @CarlosJoseph 你能举个例子说明这行不通吗
    • @CarlosJoseph 你能告诉我是什么问题
    【解决方案2】:

    如果您最终要通过 knitr::kable() 运行 data.frame 以获取格式化表格,您可以将此行添加到您的脚本中:

    选项(knitr.kable.NA = "--")

    然后,格式化的表格(html、pdf 等)将有长破折号而不是 NA,但底层的 data.frame 不会被修改。

    【讨论】:

      【解决方案3】:

      这行得通吗:

      library(dplyr)
      library(tidyr)
      output %>% mutate(SUM = rowSums(across(2:last_col()), na.rm = TRUE)) %>% 
        mutate(across(everything(), ~ replace_na(as.character(.), '-')))
              date ABC CDE FGH SUM
      1 2021-06-30   4   1   6  11
      2 2021-07-02   1   -   -   1
      

      【讨论】:

        猜你喜欢
        • 2019-10-11
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多