2017-08-09 78 views
3

刪除所有點我有這樣一個字符串列表:在R,從字符串除了最後

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,依此類推。

我懷疑它是用正則表達式來完成的,但我不知道如何。有任何想法嗎?

回答

3

您需要根據PCRE正則表達式在先行與gsub

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

看到online R demo

詳細

  • \\. - 點
  • (?=[^.]*\\.) - 這是其次的智慧小於或等於.(與[^.]*匹配),然後是文字.(?=...)是一個積極的向前看,它需要一些模式立即顯示在當前位置的右側,但不會被添加到匹配值,並且正則表達式索引停留在同一個位置,即不是高級的。
+2

或者,我猜負前瞻作品:'GSUB( 「[]?!(\\ d + $)」, 「」,myStr中,perl的= TRUE)' – Frank

+1

@Frank:是的,它將匹配任何沒有跟隨1個或多個數字和字符串結尾的點。 –

1

一個簡單的「子」可以達到相同的效果,因爲它只會替換第一個匹配的模式。例如,

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