如何删除除R中的最后一个逗号之外的所有逗号

时间:2017-10-08 11:20:48

标签: r comma strsplit

我有兴趣从字符串中的美元金额中移除所有逗号,但最后一个(如果有的话)。例如,假设我有

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

我感兴趣的是这样的:

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

所以,我想首先检查最后是否存在逗号。如果是,我会删除除最后一个之外的所有内容。如果最后没有逗号,我只需删除所有逗号。

3 个答案:

答案 0 :(得分:3)

regex很有帮助

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

正则表达式模式",(?!$)"

的说明

,匹配所有逗号 (?!$)否定前瞻,排除位于字符串结尾的逗号$

答案 1 :(得分:1)

以下是2个解决方案

"123 456 789".split(" ")

用数字(捕获组)

代替数字后跟数字
["123", "456", "789"]

逗号后面必须跟一个要替换的数字(正向前瞻)

在这两种情况下,gsub(",(\\d)", "\\1", x) 可以替换为gsub(",(?=\\d)", "", x, perl = T) ,如果您想匹配任何符号而不是数字:

\\d

答案 2 :(得分: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