2017-10-08 263 views
-3

我有興趣從字符串中的一美元金額中刪除所有逗號,但最後一個逗號(如果有)。例如,可以說我有如何刪除除R中最後一個逗號以外的所有逗號

x <- c("$1,450", "$1,254,345,", "$2,423,123") 

什麼我感興趣的是這樣的:

x 
## [1] "$1450" "$1254345," "$2423123" 

所以,我首先要檢查是否存在在最後一個逗號。如果是的話,我會刪除除最後一個之外的所有內容。如果最後沒有逗號,那我就把它們全部刪除。

+0

你嘗試過哪些正則表達式或其他策略無效? – hrbrmstr

回答

3

regex是有幫助的說明正則表達式的

gsub(",(?!$)", "", x, perl=TRUE) 
# "$1450"  "$1254345," "$2423123" 

",(?!$)"

,比賽所有逗號
(?!$)負前瞻,排除位於字尾的逗號$

0

您可以通過將gsub()str_sub()組合在ifelse()中來實現。下面是一個例子

x1 <- c("$1,450", "$1,254,345,", "$2,423,123") 
x1 
library(stringr) 
x2 <- ifelse(str_sub(x1, -1, nchar(x1)) == ",", 
      paste0(gsub(",", "", str_sub(x1, 1, nchar(x1)-1)), ","), 
      gsub(",", "", str_sub(x1, 1, nchar(x1)))) 
x2 
1

這裏有2種溶液

gsub(",(\\d)", "\\1", x) 

逗號後跟數字取代有數字(捕獲組)

gsub(",(?=\\d)", "", x, perl = T) 

逗號必須跟要替換的數字(正向)

在這兩種情況下,\\d都可以替換d與.,如果你想,而不是匹配任何符號,如果數字:

gsub(",(.)", "\\1", x) 
gsub(",(?=.)", "", b, perl = T) 
+1

或者可能只是'gsub(「,(。)」,「\\ 1」,x)' –

+0

@G。格洛騰迪克謝謝,編輯包括你的建議。 – missuse