2015-09-03 4 views
0

Я совершенно новый для «R» (так может показаться немного базовым) Я извлек некоторые данные из Всемирной организации здравоохранения, но изо всех сил пытаюсь преобразовать ряд данных, которые имеют некоторые точек данных, классифицированных как факторы, а некоторые - как числа.Фактор на числовой номер в R

Во-первых, я выделил строку данных, которая представляет частные расходы на здравоохранение в разбивке по годам (между 2003 и 2014)

> private_exp 
    2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 
32 41.3 41.3 38.6 37.8 36.9 33 33.4 33.6 30.4 28.2 28.2 25.3 

Когда я посмотрел на структуру данных, я заметил, что некоторые точек данных перечислены как числа, а другие перечислены как факторы (которые я нашел нечетными).

> str(private_exp) 
'data.frame': 1 obs. of 12 variables: 
$ 2003: Factor w/ 23 levels "","0","0.2","14.1",..: 15 
$ 2004: Factor w/ 20 levels "","0.2","107",..: 15 
$ 2005: Factor w/ 21 levels "",">90","0.2",..: 15 
$ 2006: num 37.8 
$ 2007: Factor w/ 17 levels "","0.9","15",..: 9 
$ 2008: num 33 
$ 2009: num 33.4 
$ 2010: num 33.6 
$ 2011: Factor w/ 20 levels "","0.7","13.4",..: 12 
$ 2012: num 28.2 
$ 2013: num 28.2 
$ 2014: num 25.3 

Я не очень понимаю, как одна точка данных, скажем, 2003 может быть фактором, с 23 уровнями, когда на самом деле его просто число. Во всяком случае, я попытался изменить его на числовое и не понял выход.

> as.numeric(private_exp$`2003`) 
[1] 15 

И еще, кажется, фактор:

> private_exp$`2003` 
[1] 41.3 
23 Levels: 0 0.2 14.1 16.9 2 21.6 2617 2864 3.89 32.3 ... No data 
> class(private_exp$`2003`) 
[1] "factor" 

Это мой первый atempt на делать что-либо с R - я явно что-то отсутствует. Любая помощь будет принята с благодарностью.

+0

Просто угадайте, но попробуйте прочитать данные с помощью 'stringsAsFactors = F' –

+1

, возможно, у вас есть некоторое числовое значение внутри ваших переменных, потому что R рассматривает его как символ и поэтому, поскольку вы не указали, что не хотите символы как факторы, R импортирует переменные как факторы. Вы можете сделать 'as.numeric (as.character (myvariable))', чтобы изменить вашу переменную 'myvariable' как числовую, а нечисловые значения будут преобразованы в NA. Или вы можете сначала найти нечисловые значения в своем входном файле, исправить их и снова импортировать файл в R, где переменные должны быть импортированы непосредственно в числовые – Cath

ответ

1

Похоже, вы были разобраны копией семантики R.

Когда вы делаете:

as.numeric(private_exp$`2003`) 

вы принимаете копию из 2003 колонны и превращения копию в числовой вектор.

Если вы хотите изменить оригинальный data.frame, вы должны назначить его обратно:

private_exp$`2003` <- as.numeric(private_exp$`2003`) 

Обратите внимание, что as.numeric на векторе фактор даст уровни, а не текстовые значения. Для того, чтобы получить текстовые значения в качестве числового вектора, вы должны извлечь их с помощью as.character и затем преобразовать в числовой:

private_exp$`2003` <- as.numeric(as.character(private_exp$`2003`)) 

Вы можете узнать больше о factors in the documentation.

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