Читать нулевые значения из файла - PullRequest
6 голосов
/ 27 октября 2010

Мне нужно прочитать фрейм данных из файла, содержащего значения 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 ]

9 голосов
/ 27 октября 2010

Всегда всегда делайте сводку (вещь), если что-то неожиданно.

> 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 - это не то же самое, что NULL в R. 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)

6 голосов
/ 27 октября 2010

Попробуйте это:

> 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
0 голосов
/ 27 октября 2010

Я никогда ничего не делал в r, но я предполагаю, что ваша переменная имеет значение «NULL», поэтому попробуйте проверить, равна ли переменная строке «NULL».Если вам нужно использовать метод is.null (), вы можете просмотреть переменные и преобразовать NULL в NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...