2010-10-27 50 views
5

Tôi cần phải đọc một khung dữ liệu từ một tệp có chứa giá trị NULL. Dưới đây là một ví dụ file:Đọc giá trị null từ tập tin

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

tôi đọc tập tin này vào một khung dữ liệu:

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

Nhưng "NULL" mục không được giải thích bởi R như NULL:

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

Làm thế nào nên Tôi định dạng tập tin đầu vào của tôi để R xử lý đúng các mục như NULL?

Trả lời

8

Luôn luôn luôn làm tóm tắt (điều) nếu có điều gì là bất ngờ.

> 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 

có vẻ hơi lạ. Mũi khoan xuống:

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

nó là cái quái gì vậy?

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

Sự xuất hiện của một số không hợp lệ định dạng (chuỗi 'NULL') đã gây ra R để đi "oh Tôi đoán đây không phải là con số, tôi sẽ đọc chúng thành chuỗi nhân vật và tạo ra một yếu tố (phân loại biến) cho bạn ".

Giải pháp vừa được đăng để sử dụng na.string = "NULL", nhưng hãy nhớ rằng NA không giống như NULL trong R. NA là điểm đánh dấu cho dữ liệu bị thiếu, NULL là giá trị không chính xác. Hãy so sánh:

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

Khi bạn đã đọc nó trong một cách chính xác, các thử nghiệm thích hợp thường is.na (foo)

+0

+1 Để chỉ ra rằng điều này không thể xảy ra. – mbq

-2

Tôi chưa bao giờ làm bất cứ điều gì trong r, nhưng tôi cho rằng biến của bạn có giá trị "NULL", vì vậy hãy thử kiểm tra xem biến có bằng chuỗi "NULL" không. Nếu bạn phải sử dụng phương thức is.null(), bạn có thể đi qua các biến của mình và chuyển đổi "NULL" thành NULL.

+1

Trong R là, có một khác nhau quan trọng giữa 'na' (chiều dài 1) và' NULL' (chiều dài 0). – hadley

6

Hãy thử điều này:

> 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 
Các vấn đề liên quan