2016-09-14 3 views
1

У меня есть эта строка переменнойВводя NA в as.numeric

mystr <- "98,015" 

, и я хочу, чтобы преобразовать его в число.

Поэтому я использую:

num <- as.numeric(mystr) 

, но я получаю эту ошибку:

Warning message: 
NAs introduced by coercion 

Это ввести NA вместо числа. Если используется строка типа "21", я принимаю номер успешно. Что я могу сделать?

+0

'readr :: parse_number ("98015")' – alistaire

ответ

1

Мы можем использовать sub для замены , на "", а затем конвертировать его в numeric. Из-за символа , применение as.numeric принуждает его к NA.

as.numeric(sub(",", "", mystr)) 

Если , представляют ., а затем заменить его . (на основе @ комментариев RHertel в)

as.numeric(sub(",", ".", mystr)) 

Это не ясно, будет ли оригинальный набор данных в OP является data.frame или просто vector. Если это data.frame, при чтении с read.csv/read.table, мы можем указать dec=",".

+0

Спасибо. Он работает 'as.numeric (sub (", "," ", mystr))'! Что делать, если у меня есть число, подобное этому «1,071,911» –

+1

@Jason_K В этом случае вы можете использовать 'gsub' вместо' sub' (но из вашего примера я думал, что на каждый номер – akrun

0

функция GSUB также делает то же

mystr <- c("98,015","10,125","11,456") 

mystr <- as.numeric(gsub("\\,","",mystr)) 

class(mystr) 
[1] "numeric" 
+3

есть только один "," вам не нужно скрывать запятую и в чем именно заключается разница с другим ответом, за исключением бесполезного использования 'gsub' вместо' sub'? – Cath

+1

Спасибо, что Cath для вашего обновления попробует с другой функцией –

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