2014-08-31 36 views
5

我有一个问题,当在R中使用as.numeric函数时如何避免NA如您在下面看到的,我有一个字符变量(但它的值是数字)cumulative_viewers, ,我想通过as.numeric将它转换为数字,但它不能正常工作。 问题是当数值的位数超过四位数时,即使值为数字,as.numeric函数也会返回NA。 例如,as.numeric功能在'999'或'999999'的位数超过四位时与'999'或'997'值相符合BUT ,则as.numeric函数不会返回NA =.=;;;;;;;;;;;;其真正的数值....如何避免“警告消息:通过强制引入的NAs”as.numeric()

任何人都可以请帮我解决这个问题? 我发了一天来处理它,但不能有一个答案了TT> TT

paste(data_without_duplicates$cumulative_viewers) 

    [1] "12,983,336" "12,323,294" "11,375,954" "10,917,221" "10,667,700" 
    [6] "10,292,386" "9,350,192" "9,135,520" "9,001,309" "8,653,415" 
    [11] "7,784,755" "7,508,976" "7,362,790" "6,959,047" "6,706,543" 
    ..... 
    [1426] "1,026"  "1,024"  "1,023"  "1,020"  "1,017"  
    [1431] "1,016"  "1,013"  "1,011"  "1,001"  "1,000"  
    [1436] "1,000"  "999"  "997"  "994"  "990"  
    [1441] "989"  "988"  "984"  "982"  "979"  
    [1446] "974"  "972"  "971"  "966"  "961"  


as.numeric(data_without_duplicates$cumulative_viewers) 

    [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
    [18] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
    [35] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
    ....... 
    [1395] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
    [1412] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
    [1429] NA NA NA NA NA NA NA NA 999 997 994 990 989 988 984 982 979 
    [1446] 974 972 971 966 961 959 958 957 950 946 941 930 929 911 911 910 910 
    [1463] 910 907 907 902 898 897 895 892 890 890 889 885 885 883 872 871 868 
+0

他们全部整数?有没有十进制数字?小于1的数字等? – 2014-08-31 15:55:52

回答

3

在我看来,就好像在你的数据中的逗号的问题。可能有几十种处理方式。

这里有一个

x <- c("12,983,336", "12,323,294", "11,375,954", "10,917,221", "10,667,700", 
     "10,292,386", "9,350,192", "9,135,520", "9,001,309", "8,653,415", 
     "7,784,755", "7,508,976", "7,362,790", "6,959,047", "6,706,543", 
     "1,026", "1,024", "1,023", "1,020", "1,017", "1,016", "1,013", 
     "1,011", "1,001", "1,000", "1,000", "999", "997", "994", "990", 
     "989", "988", "984", "982", "979", "974", "972", "971", "966", 
     "961") 

as.numeric(gsub(",","",x,fixed=TRUE)) 
11

这不是真的位数的问题,只是一个事实,即具有四个或更多位数的数字对他们有逗号:

N1 <- c("1000", "1,000", "10000", "10,000") 
as.numeric(N1) 
## 
[1] 1000 NA 10000 NA 
Warning message: 
NAs introduced by coercion 
## 
> N2 <- gsub(",","",N1) 
> as.numeric(N2) 
[1] 1000 1000 10000 10000