在R数据表中读取空白(NA)

时间:2015-06-19 11:47:05

标签: r function data.table

我正在尝试创建一个功能,可以找到丢失的位置并将数据表中的缺失归咎于此。现在,此函数广泛使用setCity来找出缺失的位置,并用插补值替换它。它适用于所有类型的变量,直到输入为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

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:4)

您可以像这样使用快速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

答案 1 :(得分:0)

使用条件分配的另一种解决方案(使用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