2013-02-05 26 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