我有一个带字母数字字符的字符向量d
d <- c("012309 template", "separate 00340", "00045", "890 098", "3405 garage", "matter00908")
d
[1] "012309 template" "separate 00340" "00045" "890 098" "3405 garage" "matter00908"
如何从R中的所有数字中删除前导零?
as.numeric
将仅在数字或整数向量中删除所有前导零。我使用gsub
尝试了regex
,但无法获得所需的结果。
预期输出如下
out <- c("12309 template", "seperate 340", "45", "890 98", "3405 garage", "matter908")
out
[1] "12309 template" "seperate 340" "45" "890 98" "3405 garage" "matter908"
答案 0 :(得分:19)
除非前面有数字,否则您可以使用负向lookbehind消除0:
> d <- c("100001", "012309 template", "separate 00340", "00045", "890 098", "3405 garage", "matter00908")
> gsub("(?<![0-9])0+", "", d, perl = TRUE)
[1] "100001" "12309 template" "separate 340" "45"
[5] "890 98" "3405 garage" "matter908"
使用正则表达式的另一种方式:
> gsub("(^|[^0-9])0+", "\\1", d, perl = TRUE)
[1] "100001" "12309 template" "separate 340" "45"
[5] "890 98" "3405 garage" "matter908"
>
答案 1 :(得分:9)
以下是使用stringi包中的stri_replace_all_regex
的解决方案:
d <- c("012309 template", "separate 00340", "00045",
"890 098", "3405 garage", "matter00908")
library("stringi")
stri_replace_all_regex(d, "\\b0*(\\d+)\\b", "$1")
## [1] "12309 template" "separate 340" "45" "890 98"
## [5] "3405 garage" "matter00908"
说明:我们匹配字边界内的所有数字序列(\b
)。尾随零贪婪地匹配(0+
)。其余数字(\d
表示任何数字,
\d+
表示他们的非空序列)是在一个组((...)
)内捕获的。然后我们仅用群组捕获的东西替换所有这些匹配。
如果您还希望删除单词中的0(如您的示例所示),只需省略\b
并致电:
stri_replace_all_regex(d, "0*(\\d+)", "$1")
## [1] "12309 template" "separate 340" "45" "890 98"
## [5] "3405 garage" "matter908"