我有一个包含因子类的数据,因此在将其转换为数字时,我收到此警告消息。以下代码我用R编写将因子转换为数字
class(usedcars$Price)
[1] "factor"
e <- paste(usedcars$Price)
e <- as.numeric(paste(usedcars$Price))
Warning message:
NAs introduced by coercion
所有数据都被转换为“NA”但类是数字。 任何人都可以帮我解决这个NA警告信息,同时将一个因子转换为R中的数字?
答案 0 :(得分:6)
当您对非数字变量使用as.numeric
时会发生这种情况。
我的猜测是你的数字中有“,”(例如1,285)
因此,首先使用db <- gsub(",","",db)
使您的因素“干净”,然后运行as.numeric(db)
答案 1 :(得分:3)
我会尝试复制你的问题:
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
alexwhan评论实际上很好:
> as.numeric(as.character(a))
[1] 27 37 57 89 20 86 97 62 58 6
即使您的数据需要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
所以唯一的解释是你在所有你的数字中有一些(意想不到的)角色
> as.numeric(paste(a, "a"))
[1] NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion
如果你看不到任何字母,我发生了以下情况:
> 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
intToUtf8(32)是来自键盘的常用空格(如上面的某些行),但数字160看起来与另一个不同的东西相似,as.numeric
(以及trim
来自gdata
)无法识别并返回
NA
。
答案 2 :(得分:1)
您可以从hablar软件包中尝试retype
。如果问题是逗号而不是点,则将其替换为点。示例:
library(hablar)
library(dplyr)
df <- tibble(a = as.factor(c("1,56", "5,87")))
df %>% retype()
给您
# A tibble: 2 x 1
a
<dbl>
1 1.56
2 5.87
答案 3 :(得分:0)
我知道这是很久以前问过的,但是由于它没有一个可接受的答案,因此我想补充一下:
e <- as.numeric(as.factor(usedcars$Price))
使用粘贴时,它实质上是将价格转换为字符,然后转换为数字,并且由于数据框的属性而不能正常工作。