【问题标题】:Set 0 to NA in R在 R 中将 0 设置为 NA
【发布时间】:2018-02-24 18:53:24
【问题描述】:

Set NA to 0 in R 的对面,我有一个 data.frame data,其中包含 A 和 B 列(以及其他),其中 NA 被 0 替换为 rowSums(data[,c("A", "B")], na.rm=TRUE).

我需要用 NA 重新替换所有 0 值。由于我正在使用不仅包含数值的 data.frame,convert all zeros of a matrix in R to NA 对我不起作用(在这里转换为矩阵似乎没有希望)。

我试过了 data["A" == 0] <- NAdata["B" == 0] <- NA - 但是,它什么也没做(data.frame 似乎保持不变)

【问题讨论】:

  • 试试括号外的"A" == 0 看看为什么。

标签: r na


【解决方案1】:

这是你需要的吗?

df <- data.frame(A=c(0, 3, "bla"), B=c("A", 0, "X"), C=c("x","B", 4)) #some fake data
df[df == 0] <- NA

【讨论】:

  • 感谢您的评论!我编辑了我的帖子 - 我不想将 data.frame 中的所有 0 值更改为 NA,而只更改 A 行和 B 行中的值。
  • 那么请发布您的数据示例,例如使用dput 函数,
  • 对不起 - 我也编辑了我的回复。我认为,问题在于我想处理特定的列。
  • 我试过data$A[data$A == 0] &lt;- NA,它奏效了。感谢您的帮助!
【解决方案2】:

dplyr 解决方案:data %&gt;% dplyr::mutate(A = ifelse(A == 0, NA, A))

【讨论】:

    【解决方案3】:

    另一个dplyr 解决方案。如果列是数字,这将使用mutate_if 仅用 NA 替换零。 B 不会改变,因为它是一个因子/字符列。

    set.seed(123)
    df <- data.frame(A=rep(0:3, 5), B=rep(c("0", "1"), 10), C=c(sample(0:5, 20, replace = TRUE)))
    
    library(dplyr)
    df %>%
      mutate_if(is.numeric, funs(ifelse(. == 0, NA, .)))
    

    如果您希望转换所有列(包括因子/字符列),也可以使用mutate_all

    df %>%
      mutate_all(funs(ifelse(. == 0, NA, .)))
    

    结果:

        A  B  C
    1  NA NA  1
    2   1  2  4
    3   2 NA  2
    4   3  2  5
    5  NA NA  5
    6   1  2 NA
    7   2 NA  3
    8   3  2  5
    9  NA NA  3
    10  1  2  2
    11  2 NA  5
    12  3  2  2
    13 NA NA  4
    14  1  2  3
    15  2 NA NA
    16  3  2  5
    17 NA NA  1
    18  1  2 NA
    19  2 NA  1
    20  3  2  5
    

    【讨论】:

      【解决方案4】:

      dplyr解决方案

      library(dplyr)
      mtcars %>% replace(.==0, NA)
      

      基础 R 解决方案

      replace(mtcars, mtcars==0, NA)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 2016-06-27
        • 2018-10-08
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多