不能将因子转换为R中的数字

时间:2014-02-12 19:53:11

标签: r

我试过了:

  • i <- as.numeric(as.character(Impress))

  • i <- as.numeric(as.character(levels(Impress)))

  • i <- as.numeric(paste(Impress))

我总是得到:

Warning message:
NAs introduced by coercion 
> i
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

这是我想要数字化的数据:

> Impress
 [1]  24,085,563.00   35,962,587.00   31,714,513.00   28,206,422.00   40,161,010.00   36,292,929.00   31,545,482.00 
 [8]  28,213,878.00   35,799,224.00   32,400,885.00   28,496,459.00   37,456,344.00   38,108,667.00   33,407,771.00 
[15]  32,540,479.00   30,692,707.00   22,873,000.00   21,329,146.00   28,921,953.00   30,471,519.00   28,601,289.00 
[22]  27,450,630.00   26,708,790.00   19,825,041.00   18,844,169.00   29,592,039.00   31,012,594.00   28,792,531.00 
[29]  28,578,028.00   24,913,985.00 
30 Levels:  18,844,169.00   19,825,041.00   21,329,146.00   22,873,000.00   24,085,563.00   24,913,985.00  ...  40,161,010.00 

> paste(Impress)
 [1] " 24,085,563.00 " " 35,962,587.00 " " 31,714,513.00 " " 28,206,422.00 " " 40,161,010.00 " " 36,292,929.00 " " 31,545,482.00 "
 [8] " 28,213,878.00 " " 35,799,224.00 " " 32,400,885.00 " " 28,496,459.00 " " 37,456,344.00 " " 38,108,667.00 " " 33,407,771.00 "
[15] " 32,540,479.00 " " 30,692,707.00 " " 22,873,000.00 " " 21,329,146.00 " " 28,921,953.00 " " 30,471,519.00 " " 28,601,289.00 "
[22] " 27,450,630.00 " " 26,708,790.00 " " 19,825,041.00 " " 18,844,169.00 " " 29,592,039.00 " " 31,012,594.00 " " 28,792,531.00 "
[29] " 28,578,028.00 " " 24,913,985.00 "

当我执行i<-as.numeric(Impress)时,它会粘贴错误的值。

谢谢!

2 个答案:

答案 0 :(得分:1)

由于数据有逗号,因此R无法将其转换为数字。您必须先删除逗号sub(),然后转换:

i <- as.numeric(gsub(",", "", as.character(impress)))

答案 1 :(得分:1)

就计算机而言,,不是数字,因此包含它的任何数字字符串都不能是数字,即使对于人类来说这些看起来都是完全可以接受的数字。

摆脱,然后它会起作用,例如使用gsub()

i <- as.numeric(gsub(",", "", as.character(Impress)))

E.g。

Impress <- c("24,085,563.00", "35,962,587.00", "31,714,513.00", "28,206,422.00")
gsub(",", "", as.character(Impress))
i <- as.numeric(gsub(",", "", as.character(Impress)))
i

R> gsub(",", "", as.character(Impress))
[1] "24085563.00" "35962587.00" "31714513.00" "28206422.00"
R> i
[1] 24085563 35962587 31714513 28206422
R> is.numeric(i)
[1] TRUE