【问题标题】:Replacing NULL values in a data.frame替换 data.frame 中的 NULL 值
【发布时间】:2017-09-10 02:53:48
【问题描述】:

我对 R 很陌生,我正在处理具有多个 NULL 值的数据框。到目前为止,我无法替换那些,而且我无法解决解决方案,所以如果有人可以帮助我,那就太棒了。

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

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

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

【问题讨论】:

标签: r


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    通常,R 使用 NA 值而不是 NULL 值效果更好。如果 NULL 值是指该值实际上是“NULL”,而不是空白值,那么您可以使用它来用 NA 替换 NULL 因子值:

    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
    

    【讨论】:

    • @L.Geerlofs - 如果这有帮助,请记住选择一个解决方案,以帮助社区知道它已解决,并帮助其他有类似问题的人更快地找到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2021-12-12
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多