从文件中读取空值

时间:2010-10-27 11:21:02

标签: r

我需要从包含NULL值的文件中读取数据帧。这是一个示例文件:

charCol floatCol intCol
a       1.5      10
b       NULL     3
c       3.9      NULL
d       -3.4     4

我将此文件读入数据框:

> df <- read.table('example.dat', header=TRUE)

但是“NULL”条目不会被R解释为NULL:

> is.null(df$floatCol[2])
[1] FALSE

我应该如何格式化输入文件以便R正确地将这些条目视为NULL?

3 个答案:

答案 0 :(得分:9)

如果出现意外情况,请始终始终做摘要(事情)。

> summary(df)
 charCol floatCol  intCol 
 a:1     1.5 :1   10  :1  
 b:1     -3.4:1   3   :1  
 c:1     3.9 :1   4   :1  
 d:1     NULL:1   NULL:1  
看起来有点奇怪。深入研究:

> summary(df$floatCol)
 1.5 -3.4  3.9 NULL 
   1    1    1    1 

到底是什么?

> class(df$floatCol)
[1] "factor"

存在无效的数字格式(字符串'NULL')导致R变为“哦,我想这些不是数字,我会把它们读成字符串并为你做一个因子(分类变量) ”

解决方案刚刚发布使用na.string =“NULL”,但请记住NA与R中的NULL不同.NA是缺失数据的标记,NULL是真正的非值。比较:

> c(1,2,3,NULL,4)
[1] 1 2 3 4
> c(1,2,3,NA,4)
[1]  1  2  3 NA  4

一旦你正确阅读了它,适当的测试通常是is.na(foo)

答案 1 :(得分:6)

试试这个:

> Lines <- "charCol floatCol intCol
+ a       1.5      10
+ b       NULL     3
+ c       3.9      NULL
+ d       -3.4     4"
> 
> # DF <- read.table("myfile", header = TRUE, na.strings = "NULL")
> DF <- read.table(textConnection(Lines), header = TRUE, na.strings = "NULL")
> DF
  charCol floatCol intCol
1       a      1.5     10
2       b       NA      3
3       c      3.9     NA
4       d     -3.4      4

答案 2 :(得分:-2)

我从未在r中做过任何事情,但我认为你的变量的值为“NULL”,所以请尝试检查变量是否等于字符串“NULL”。如果必须使用is.null()方法,则可以检查变量并将“NULL”转换为NULL。