在R中,删除除最后一个之外的所有点

时间:2017-08-09 15:46:31

标签: r regex

我有一个像这样的字符串列表:

mystr <- c("16.142.8",          
       "52.135.1",         
       "40.114.4",          
       "83.068.8",         
       "83.456.3",         
       "55.181.5",         
       "76.870.2",         
       "96.910.2",         
       "17.171.9",         
       "49.617.4",         
       "38.176.1",         
       "50.717.7",         
       "19.919.6")

我知道第一个点.只是一个千位分隔符,而第二个点是十进制运算符。

我想将字符串转换为数字,因此第一个应该变为16142.8,第二个变为52135.1,依此类推。

我怀疑它是用正则表达式完成的,但我不确定如何。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您需要一个基于预测的PCRE正则表达式gsub

gsub("\\.(?=[^.]*\\.)", "", mystr, perl=TRUE)

查看online R demo

<强>详情

  • \\. - 一个点
  • (?=[^.]*\\.) - 后面跟着.以外的0个或多个字符(与[^.]*匹配),然后是文字.(?=...)是一个积极的先行,需要一些模式立即显示在当前位置的右侧,但不会添加到匹配值,并且正则表达式索引保持在同一个地方,即不是高级

答案 1 :(得分:1)

简单的“sub”可以实现相同的效果,因为它只会替换第一个匹配模式。例如,

sub("\\.", "", mystr)