替换data.frame中的NULL值

时间:2017-09-09 17:50:16

标签: r

我对R很新,我正在研究一个有几个NULL值的数据框。到目前为止,我无法取代那些,我无法解决一个解决方案,所以如果有人能帮助我会很棒。

所有出现NULL值的变量都被归类为因子。

如果我使用函数is.null(data),答案是FALSE,这意味着必须替换才能生成一个像样的图形。

我可以使用set.seed替换所有NULL值,还是需要使用其他函数?

2 个答案:

答案 0 :(得分:3)

您可以使用dplyrreplace

数据

df <- data.frame(A=c("A","NULL","B"), B=c("NULL","C","D"), stringsAsFactors=F)

溶液

library(dplyr)

ans <- df %>% replace(.=="NULL", NA) # replace with NA

输出

     A    B
1    A <NA>
2 <NA>    C
3    B    D

另一个例子

ans <- df %>% replace(.=="NULL", "Z") # replace with "Z"

输出

  A B
1 A Z
2 Z C
3 B D

答案 1 :(得分:2)

通常,R对NA值而不是NULL值更好。如果用NULL值表示该值实际上表示&#34; NULL&#34;,而不是空值,则可以使用此值将NULL因子值替换为NA:

df <- data.frame(Var1=c('value1','value2','NULL','value4','NULL'),
                 Var2=c('value1','value2','value3','NULL','value5'))

#Before
    Var1   Var2
1 value1 value1
2 value2 value2
3   NULL value3
4 value4   NULL
5   NULL value5

df <- apply(df,2,function(x) suppressWarnings(levels(x)<-sub("NULL", NA, x)))

#After
     Var1     Var2    
[1,] "value1" "value1"
[2,] "value2" "value2"
[3,] NA       "value3"
[4,] "value4" NA      
[5,] NA       "value5"

这实际上取决于列的内容是什么样的。以上只有在不是数字的列的情况下才有意义。如果列中的值是数字,则使用as.numeric()将自动删除不是数字的所有内容。请注意,在转换为数字之前将因子转换为字符很重要;所以使用as.numeric(as.character(x)),如下所示:

df <- data.frame(Var1=c('1','2','NULL','4','NULL'))

df$Var1 <- as.numeric(as.character(df$Var1))

#After
  Var1
1    1
2    2
3   NA
4    4
5   NA