【问题标题】:Replace NA with 0 in R在 R 中将 NA 替换为 0
【发布时间】:2021-07-02 07:25:35
【问题描述】:

如何在 R 中用零替换数据框中的“NA”?我尝试了以下操作,但出现此错误:[<-.data.frame(*tmp*, is.na(data), value = 0) 中的错误: 替换中不支持的矩阵索引

data[is.na(data)] <- 0

谢谢!

【问题讨论】:

  • 您应该将其应用于列,例如data$col1[is.na(data$col1)] &lt;- 0
  • 这很奇怪。请考虑发布dput(head(data)) 的输出,以便我们有一个可重现的示例并猜测发生了什么。
  • 正如 nicola 所说,但我们可以通过运行 str(data) 猜出问题所在。

标签: r


【解决方案1】:

我会为此使用tidyr

library(tidyverse)

df <- tibble(
    x = c(NA, NA, 1),
    y = c(1, 2, NA)
)

df
#> # A tibble: 3 x 2
#>       x     y
#>   <dbl> <dbl>
#> 1    NA     1
#> 2    NA     2
#> 3     1    NA

df %>%
    mutate(
        across(everything(), replace_na, 0)
    )
#> # A tibble: 3 x 2
#>       x     y
#>   <dbl> <dbl>
#> 1     0     1
#> 2     0     2
#> 3     1     0

reprex package (v1.0.0) 于 2021-04-06 创建

【讨论】:

    【解决方案2】:

    ImputeTS 有一个名为 imputeTS::replace_na() 的有用函数,它应该将数据帧中的所有 NA 值替换为 0。

    library(tidyverse)
    library(imputeTS)
    
    
    df <- tribble(~T1, ~T2,
            1, NA,
            3, NA, 
            NA, 4,
            NA, NA)
    
    imputeTS::na_replace(df)
    #> # A tibble: 4 x 2
    #>      T1    T2
    #>   <dbl> <dbl>
    #> 1     1     0
    #> 2     3     0
    #> 3     0     4
    #> 4     0     0
    

    reprex package (v2.0.0) 于 2021-04-06 创建

    【讨论】:

    • 如果此分析器没有用处,我将不胜感激。
    猜你喜欢
    • 2021-10-15
    • 2020-11-19
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2012-06-17
    相关资源
    最近更新 更多