首页 > 解决方案 > 计算字符串中非数字字符的数量

问题描述

如何计算R中同时包含数字和非数字字符的字符串中非数字字符的数量

例如:

c("ab34","f354","q64423","abf3")

我希望输出为:

c(2,1,1,3)

标签: rstringcounttidyverse

解决方案


1) gsub用空字符串替换数字并计算剩下的内容。不使用任何包。

x <- c("ab34","f354","q64423","abf3")
nchar(gsub("\\d", "", x))
## [1] 2 1 1 3

2) gregexpr另一种可能性是使用 gregexpr 和长度来计算非数字。我们将一个非数字附加到每个组件,以便该值永远不会为零(因为 gregexpr 在这种情况下返回 NA ),然后最后减去 1。

lengths(gregexpr("\\D", paste0(x, "X"))) - 1
## [1] 2 1 1 3

3) strsplit / %in%将字符串拆分为单个字符,并将不在 0:9 中的数字相加

sapply(strsplit(x, ""), function(x) sum(!x %in% 0:9))
[1] 2 1 1 3

4)修剪在问题的示例中,数字始终位于末尾(或者即使它们位于开头),我们可以将它们修剪掉,然后计算剩下的内容。

nchar(trimws(x, white = "\\d"))
## [1] 2 1 1 3

5) regexpr如果数字总是在末尾,那么我们可以使用 regexpr 找到第一个的位置。我们附加一个 0 以确保至少有一个数字并在末尾减去 1。

c(regexpr("\\d", paste0(x, 0)) - 1)
## [1] 2 1 1 3

推荐阅读