【问题标题】:R can't convert NaN to NA for large data frame对于大数据框,R 无法将 NaN 转换为 NA
【发布时间】:2012-03-25 11:43:00
【问题描述】:

我有一个大约 60 列的大小数据集,其中意外填充了 NaN 而不是 NA。列类型是字符、数字、因子、整数的混合。我需要将NaN 转换为NA,因为它们正在搞砸包括线性回归在内的几个函数的工作。我知道如何在此处更改此问题的单个列:

R can't convert NaN to NA

但我很好奇是否有一种方法可以在不丢失矢量类型的情况下对完整数据帧执行此操作。有什么建议吗?还是这是一项手工作业?

【问题讨论】:

  • 这可能是我的小事,但我确实注意到您没有接受针对该问题提供的任何答案。
  • @DWin:你说得对,谢谢提醒。

标签: r nan na


【解决方案1】:

这行得通吗? (它应该用于数字、整数、字符和因子向量。)

as.data.frame( lapply(dat, function(col) {
                 if (is.numeric(col)) { is.na(col) <- is.nan(col); return(col)} else {
                 if (is.character(col) || is.factor(col) )  {
                                              is.na(col) <- col == "NaN"; return(col)} else {
                 return(col)                                                                }
                                                                                     }
                                          }
               )

dat <- 
structure(list(tester1 = structure(c(1L, 1L, 2L, 3L, 1L, 2L, 
4L), .Label = c("2", "3", "4", "NaN"), class = "factor"), tester2 = c(2, 
2, 3, 4, 2, 3, NaN)), .Names = c("tester1", "tester2"), row.names = c(NA, 
-7L), class = "data.frame")

# Produced:

  tester1 tester2
1       2       2
2       2       2
3       3       3
4       4       4
5       2       2
6       3       3
7    <NA>      NA

【讨论】:

    【解决方案2】:

    gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
         fixed = FALSE, useBytes = FALSE)
    

    工作?

    也许您需要与apply 混合使用。您能否提供一个小示例,以便我尝试实现它?

    谢谢。

    【讨论】:

      【解决方案3】:

      使用上述示例数据集。试试这个:

      CMBv = colnames(dat)
      
      dat[CMBv] = lapply(dat[CMBv], function(x){ifelse(is.nan(x), NA,x)} )
      

      【讨论】:

        猜你喜欢
        • 2019-02-28
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 2022-06-27
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 2017-04-25
        相关资源
        最近更新 更多