将Null更改为NA的函数

时间:2016-11-02 11:38:24

标签: r function na missing-data

我正在尝试编写一个将Null值变为NA的函数。我的专栏摘要如下:

      a   b 
 12 210 468 

我想将12个空值更改为NA。我还有一些其他因素列,我想将Null值更改为NA,所以我从这里和那里借了一些东西来提出这个:

# change nulls to NAs
nullToNA <- function(df){

  # split df into numeric & non-numeric functions
  a<-df[,sapply(df, is.numeric), drop = FALSE]
  b<-df[,sapply(df, Negate(is.numeric)), drop = FALSE]

  # Change empty strings to NA
  b<-b[lapply(b,function(x) levels(x) <- c(levels(x), NA) ),] # add NA level
  b<-b[lapply(b,function(x) x[x=="",]<- NA),]                 # change Null to NA

  # Put the columns back together
  d<-cbind(a,b)
  d[, names(df)]
}

但是,我收到了这个错误:

> foo<-nullToNA(bar)  
Error in x[x == "", ] <- NA : incorrect number of subscripts on matrix  
Called from: FUN(X[[i]], ...)

我已尝试在此处找到答案:Replace all 0 values to NA但它会将我的所有列更改为数值。

4 个答案:

答案 0 :(得分:9)

您可以直接索引符合逻辑条件的字段。所以你可以写:

df[is_empty(df)] = NA

is_empty是您的比较,例如df == ""

df[df == ""] = NA

但请注意is.null(df)无效,无论如何 1 会很奇怪。不过,我建议不要合并不同类型列的逻辑!相反,请单独处理它们。

1 您几乎不会在表格中遇到NULL,因为只有在基础向量为list时才有效。您可以使用此约束创建矩阵和data.frames,但is.null(df)永远不会是TRUE,因为NULL值包含在列表中。)

答案 1 :(得分:1)

如何:

df[apply(df, 2, function(x) x=="")] = NA

对我来说很好,至少在简单的例子上。

答案 2 :(得分:0)

这对我有用

    df[df == 'NULL'] <- NA

答案 3 :(得分:0)

这是我用来解决此问题的功能。

ProductPool

只需插入您遇到问题的列或向量。