10

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

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

e <- paste(usedcars$Price)
e <- as.numeric(paste(usedcars$Price))
Warning message:
NAs introduced by coercion 

伙计们,所有数据都转换为“NA”,但类是数字的。在将一个因子转换为 R 中的数字时,任何人都可以帮我摆脱这个 NA 警告消息吗?

4

4 回答 4

16

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

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

于 2015-12-03T17:02:41.800 回答
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(以及trimfrom gdata)无法识别并返回 NA

于 2013-10-01T13:27:20.567 回答
3

我知道这是很久以前问过的,但由于它没有被接受的答案,我想补充一下:

e <- as.numeric(as.factor(usedcars$Price))

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

于 2018-09-18T07:11:09.673 回答
2

你可以试试retypehablar 包。如果问题是逗号而不是点,它将用点替换它们。例子:

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
于 2018-11-01T15:08:51.720 回答