如何避免as.numeric()中的“警告信息:由强制引入的NAs”

时间:2014-08-31 15:25:38

标签: r

关于在R中使用NA函数时如何避免as.numeric,我有一个问题 如下所示,我有cumulative_viewers的字符变量(但其值是数字), 我想通过as.numeric将其转换为数字,但它无法正常工作。 问题是当数值的位数超过四位时,as.numeric函数返回NA,即使值是数字。 例如,as.numeric功能与' 999'的值很好地配合使用。或者' 997'但 当数字位数超过四位时,例如' 1000'或' 1001'或者' 999999'那么as.numeric函数返回NA =.=;;;;;;;;;;;;而不是它的真实数值......

有人可以帮我解决问题吗? 我发了一天来处理它但是还没有答案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

2 个答案:

答案 0 :(得分:16)

这不是数字位数的问题,只是你的四位或更多位数的数字中包含逗号:

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

答案 1 :(得分:4)

我认为数据中的逗号就好了。可能有很多方法可以解决这个问题。

这是一个

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))