2014-02-08 30 views
5

只删除“实际数字”我有数字和字符如何从字符的字符串中的R

c2 = "list of 2nd C2 H2O 1 12 123" 

我需要摆脱的是实际数字的所有数字串,即1,12 ,123,但不属于字符集的一部分,即第二个,C2,H2O。

到目前为止,我想出了最好的解决办法是这样的

gsub("? [[:digit:]]*", " ", c2) 
"list of nd C2 H2O " 

它成功地摆脱了1 12 123,同时保留C2 H2O。但是,我在第二场输了2场。

我在我的智慧结束。

谢谢!

回答

3

试试这个:

> gsub("\\b\\d+\\b", "", c2) 
[1] "list of 2nd C2 H2O " 
+0

它像魔术一样工作。我认为\\ b \\ d + \\ b表示空格+数字+空格。但是123并没有以空白结尾(我错了吗?)。为什么它也被删除? – wen

+0

'“\\ b”'表示边界,而不是空白。 –

1

这里有一个古怪的做法,不要求正则表达式:

Rgames> c2 = "list of 2nd C2 H2O 1 12 123" 
Rgames> sc2<-unlist(strsplit(c2,' ')) 
Rgames> nc2<-as.numeric(sc2) 
Warning message: 
NAs introduced by coercion 
Rgames> ssc2<-paste(sc2[is.na(nc2)]) 
Rgames> ssc2 
[1] "list" "of" "2nd" "C2" "H2O" 

如果需要的话,可以paste导致成一个字符串。