如何在没有强制警告消息引入的NA的情况下将因子转换为R中的数字

sam*_*sam 5 r

我有一个包含因子类的数据,所以在将其转换为数字时,我收到此警告消息.以下代码我用R编写将因子转换为数字

class(usedcars$Price)
[1] "factor"

e <- paste(usedcars$Price)
e <- as.numeric(paste(usedcars$Price))
Warning message:
NAs introduced by coercion 
Run Code Online (Sandbox Code Playgroud)

伙计们将所有数据转换为"NA"但类是数字.在R中将一个因子转换为数字时,有人可以帮我摆脱这个NA警告信息吗?

小智 8

当您使用as.numeric非数字变量时会发生这种情况.

我的猜测是你的数字中有","(例如1,285)所以首先让你的因素"干净",db <- gsub(",","",db)然后再运行as.numeric(db)


小智 5

我知道很久以前就有人问过这个问题,但由于没有公认的答案,我想添加以下内容:

e <- as.numeric(as.factor(usedcars$Price))
Run Code Online (Sandbox Code Playgroud)

当使用粘贴时,它本质上是将价格转换为字符,然后转换为数字,并且它不起作用主要是因为数据框的属性。


Mic*_*ele 4

我将尝试复制您的问题:

set.seed(1)
a <- factor(sample(1:100, 10))
> a
 [1] 27 37 57 89 20 86 97 62 58 6 
Levels: 6 20 27 37 57 58 62 86 89 97
Run Code Online (Sandbox Code Playgroud)

alexwhan 的评论实际上很好:

> as.numeric(as.character(a))
 [1] 27 37 57 89 20 86 97 62 58  6
Run Code Online (Sandbox Code Playgroud)

即使您的数据需要,trim()ed它仍然可以工作:

> paste( " ", a, " ")
 [1] "  27  " "  37  " "  57  " "  89  " "  20  " "  86  " "  97  " "  62  " "  58  " "  6  " 
> as.numeric(paste( " ", a, " "))
 [1] 27 37 57 89 20 86 97 62 58  6
Run Code Online (Sandbox Code Playgroud)

所以唯一的解释是你的所有数字中有一些(意外的)字符

> as.numeric(paste(a, "a"))
 [1] NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion 
Run Code Online (Sandbox Code Playgroud)

如果你看不到任何字母,我就发生了以下情况:

> paste( intToUtf8(160), a, intToUtf8(160))
 [1] "  27  " "  37  " "  57  " "  89  " "  20  " "  86  " "  97  " "  62  " "  58  " "  6  " 
> as.numeric(paste( intToUtf8(160), a, intToUtf8(160)))
 [1] NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)

intToUtf8(32) 是键盘上常见的空白(如上面的某些行),但数字 160 看起来类似,但又是另一个不同的东西,它(as.numerictrim来自gdata)无法识别并返回 NA