2017-10-08 205 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