在 R 数据 table 中将空白读取为缺失 (NA)

Read blank as missing(NA) in R data table

我正在尝试创建一个函数,它可以找到缺失的位置并将缺失归因于数据 table。现在这个函数广泛使用 is.na() 来找出缺失的位置,并用插补值替换它。它适用于所有类型的变量,直到输入是 character 类型的列并且缺少空白单元格,因为 is.na() 无法将其识别为缺失,因此它会跳过这些单元格进行插补。

示例:

    library(data.table)
    t<-data.table(x=c('an','ax','','az'),y=c('bn','','bz','bx'))
          x  y
      1: an bn
      2: ax      
      3:    bz 
      4: az bx
      is.na(t[,x])
      [1] FALSE FALSE FALSE FALSE

它应该在哪里

      [1] FALSE FALSE TRUE FALSE

非常感谢任何帮助。

谢谢。

您可以像这样使用快速 nzchar :

is.na(x) | !nzchar(x) 

例如:

x <- c(NA,'','a')
is.na(x) | !nzchar(x) 
## [1]  TRUE  TRUE FALSE

将此应用于 OP 示例:

我用 ifelse 将它包装在一个函数中:

tt <- data.table(x=c('an','ax','','az'),y=c('bn','','bz','bx'))
tt[, lapply(.SD,
            function(x)
              ifelse(is.na(x) | !nzchar(x),'some value',x)) ]

           x          y
1:         an         bn
2:         ax some value
3: some value         bz
4:         az         bx

另一种使用条件赋值的解决方案(使用i):

DT <- data.table(x = c('an','ax','','az',NA),
                 y = c(NA,'bn','','bz','bx'))
DT[x %in% c(NA, ""), x := 'some value']
DT[y %in% c(NA, ""), y := 'some value']

结果:

            x          y
1:         an some value
2:         ax         bn
3: some value some value
4:         az         bz
5: some value         bx