首页 > 解决方案 > 将 NA 替换为“”,但仅限于字符列

问题描述

我有一个包含约 200 列各种类型的大型数据集。我需要用 替换NA"",但只能在字符列中。

使用虚拟数据表

DT <- data.table(x = c(1, NA, 2),
                y = c("a", "b", NA))

> DT
    x    y
1:  1    a
2: NA    b
3:  2 <NA>

> str(DT)
Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ x: num  1 NA 2
 $ y: chr  "a" "b" NA

我已经尝试了以下带有条件的 for 循环,但它不起作用。

for (i in names(DT)) {
  if (class(DT$i) == "character") {
    DT[is.na(i), i := ""]
  }
}

循环运行没有错误,但不会更改DT.

我正在寻找的预期输出是这样的:

    x y
1:  1 a
2: NA b
3:  2  

解决方案不一定要涉及循环,但我想不出一个。

标签: rfor-loopdata.table

解决方案


如果您不介意使用dplyr ,一种选择:

na_to_space <- function(x) ifelse(is.na(x)," ",x)
> DT %>% mutate_if(.predicate = is.character,.funs = na_to_space)
   x y
1  1 a
2 NA b
3  2  

推荐阅读