2013-02-05 27 views
1

我从维基百科拉了一张桌子,但我得到一堆垃圾与我正在寻找的人口数字。例如,我得到“!B9840748934017Â8,244,910”当我后面的实际数字是8244910只。我用正则表达式清理了字符向量,使用sub('![[:alnum:]]*[[:space:]]', '', x)麻烦转换字符到数字在R

这工作正常,留下字符向量“8,244,910”。但是,当我尝试使用as.numeric将其转换为数字时,它会被强制转换为NA,并且我无法获取整数,无论​​我尝试进行哪些转换。有什么想法吗?

+3

地带出逗号太多,在转换为数字之前我知道了。 – A5C1D2H2I1M1N2O1R2T1

+0

谢谢!甚至没有跨过我的想法,但解决了它。 – zweiler

+2

我已将它添加为答案。你想从哪个页面获取数据?只是好奇,如果有更直接的方式。 – A5C1D2H2I1M1N2O1R2T1

回答

5

尝试以下操作:

as.numeric(gsub('![[:alnum:]]*[[:space:]]|[[:punct:]]', '', x)) 

的问题是,你有你的第一次尝试的输出逗号。在转换为as.numeric之前需要将其移除。

3

阿南达的解决方案并完成这项工作,但事情可能出错:

  • [:punct:]还包括点字符(.)这是numeric有效组成部分;
  • 笨重的正则表达式是难以阅读,它更容易打破上去:

    # remove junk

    num_temp = sub('![[:alnum:]]*[[:space:]]', '', x)

    # remove all commas from numerics

    num = gsub(",", "", num_temp)

+0

+1,关于剥离小数点的好处,但不要必须同意不得不把这个问题分成两步...... – A5C1D2H2I1M1N2O1R2T1

+0

同意第二点是一个品味,习惯和个人经验的问题... – topchef