2010-10-27 32 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