首页 > 解决方案 > 以千/百万而不是更小的数字替换逗号

问题描述

我正在阅读具有多种格式的已发表论文的数据。如果有数千或数百万,我想删除数字中的逗号,但不能更小。这是因为一些作者使用逗号来表示小数位(例如,“1,1”)。

这是一个不起作用的简单示例:

library(stringr)
> text = c('1,1', '2,222', '3,333,333')
> str_replace_all(string=text, pattern='[0-9],[0-9][0-9][0-9]', replacement = '[0-9][0-9][0-9][0-9]')
[1] "1,1"                      "[0-9][0-9][0-9][0-9]"     "[0-9][0-9][0-9][0-9],333"

理想情况下,第二个数字将更改为“2222”,第三个“3333333”,第一个剩余为“1,1”(我可以轻松处理小数位的逗号/句号问题)。

标签: r

解决方案


您可以使用积极的前瞻:

gsub(",(?=\\d{3,})", "", text, perl = TRUE)
[1] "1,1"     "2222"    "3333333"

这里的前瞻是在;(?=\\d{3,})之后至少 3 个digits ,如果满足该条件,,则删除 。

如果您愿意str_remove,可以使用前瞻:

library(stringr)
str_remove_all(text, ",(?!\\d$)")

如果逗号后面跟在字符串的结尾 ()之前的单个igit,则此处的前瞻(?!\\d$)不允许删除逗号d$


推荐阅读