我从维基百科拉了一张桌子,但是我得到了一堆垃圾,里面有我正在寻找的人口数量。例如,当我之后的实际数字仅为8,244,910时,我得到“!B9840748934017,8,244,910”。我使用正则表达式使用sub('![[:alnum:]]*[[:space:]]', '', x)
这很好用,给我留下了字符向量“8,244,910”。当我尝试使用as.numeric
将其转换为数字时,它会被强制转换为NA,无论我尝试什么转换,我都无法获得整数。有什么想法吗?
答案 0 :(得分:5)
尝试以下方法:
as.numeric(gsub('![[:alnum:]]*[[:space:]]|[[:punct:]]', '', x))
问题是您在第一次尝试的输出中有逗号。在转换为as.numeric
之前需要删除这些内容。
答案 1 :(得分:3)
Ananda的解决方案确实可以完成工作,但可能出现问题:
[:punct:]
还包含点字符(.)
,它是numeric
的有效部分; 笨重的正则表达式难以理解且更容易解决:
# remove junk
num_temp = sub('![[:alnum:]]*[[:space:]]', '', x)
# remove all commas from numerics
num = gsub(",", "", num_temp)