6

我有一个数据向量,简化版本如下:

x <- c("1234123xcv?","12341534xxx.","hello","goodbye")

我想做的是让它返回以下内容:

"1234123" "12341534" "" ""

我知道我可以做这样的事情,我手动指定每个大写/小写字母和我知道的几个特殊字符:

grep("[A-Za-z\\?\\.]",x,value=TRUE)

但我不知道该领域中的“其他”是什么,不一定是数字。(而且不能手动查看,因为太大了)

考虑到这一点,我的问题是:有没有办法指定您只希望返回数字gsub()

4

6 回答 6

11
gsub("\\D","",x) # yada yada yada
于 2012-12-22T23:08:36.880 回答
5

括号内,^表示没有。所以,这表示用“”替换不是数字的任何东西

> gsub("[^0-9]", "", x)
[1] "1234123"  "12341534" ""         "" 
于 2012-12-22T22:54:59.130 回答
4
gsub("[^[:digit:]]", "", x) #......
于 2012-12-22T22:56:14.833 回答
3

你需要这样的东西:

[^0-9]*

这将匹配任何不是数字的东西,无需指定哪个字符。

于 2012-12-22T22:54:44.380 回答
2

我会说

gsub("[^0-9]+", "", x)

[^0-9] 将一次只替换一个字符,而 [^0-9]+ 一个或多个字符会更快。

于 2012-12-23T11:40:04.367 回答
0

您可以使用 [\d]。将只返回数字。

于 2012-12-22T22:56:39.600 回答