2010-10-27 72 views
5

我需要从包含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?

回答

8

永远永远永远做总结(事)如果事情是意外。

> 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(富)

+0

+1指出这不可能发生。 – mbq 2010-10-27 12:59:27

-2

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

+1

在R是,存在NA'(长度为1)和''之间的一个重要的不同NULL'(长度0)。 – hadley 2010-10-27 13:24:06

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