2013-11-18 2 views
-2

Я пытаюсь что-то сделать с помощью [R], который должен быть предельно простым: преобразовать значения в data.frame в числа, поскольку мне нужно проверить их значения и r не распознает их как число.as.numeric округляет положительные значения/выводит NA для отрицательных значений

Когда я преобразовать десятичное число в числовой, я получаю правильное значение:

> a <- as.numeric(1.2) 
> a 
[1] 1.2 

Однако, когда я извлечь положительное значение из data.frame затем использовать as.numeric, то число округляется до :

> class(slices2drop) 
[1] "data.frame" 
> slices2drop[2,1] 
[1] 1.2 
Levels: 1 1.2 
> a <- as.numeric(slices2drop[2,1]) 
> a 
[1] 2 

Только в случае, если:

> a*100 
[1] 200 

Так что это не проблема с дисплеем, то Даты сама по себе неправильно обрабатывается.

Кроме того, когда число отрицательное, я получаю NA:

> slices2drop[2,1] <- -1 
> a <- as.numeric(slices2drop[2,1]) 
> a 
[1] NA 

Любая идея относительно того, что может происходить?

+0

Обратите внимание, что при первом показе нам slices2drop [2,1] он возвращает коэффициент. Это ваша проблема - вы работаете с фактором, а не с числовыми данными. – Dason

+0

См. Раздел '? Factor', ** Warning **. – Henrik

+0

Пожалуйста, взгляните на этот вопрос: http://stackoverflow.com/questions/3418128/how-to-convert-a-factor-to-an-integer-numeric-without-a-loss-of-information – amzu

ответ

9

Эта проблема связана с factors. Чтобы решить вашу проблему, сначала принудите свою переменную фактора быть символом, а затем примените as.numeric, чтобы получить то, что вы хотите.

номер
> x <- factor(c(1, 1.2, 1.3)) # a factor variable 
> as.numeric(x) 
[1] 1 2 3 

Целых возвращается, по одному на каждый уровень, есть 3 уровня: 1, 1.2 и 1.3, поэтому 1,2,3 возвращаются.

> as.numeric(as.character(x)) # this is what you're looking for 
[1] 1.0 1.2 1.3 

На самом деле as.numeric не округляя свои номера, он возвращает уникальное целое число на каждый уровень в переменном факторе.

Смежные вопросы