对于大数据帧,R不能将NaN转换为NA

时间:2012-03-07 22:21:58

标签: r nan na

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

R can't convert NaN to NA

但我很好奇是否有办法在不丢失矢量类型的情况下为完整数据帧执行此操作。有什么建议或是手工工作吗?

3 个答案:

答案 0 :(得分:1)

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

工作?

也许你需要与apply混合使用。你能提供一个小例子,我可以尝试实现吗?

感谢。

答案 1 :(得分: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 :(得分:-1)

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

CMBv = colnames(dat)

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