【发布时间】:2021-09-28 01:31:36
【问题描述】:
如何计算R中同时包含数字和非数字字符的字符串中非数字字符的数量
例如:
c("ab34","f354","q64423","abf3")
我希望输出是:
c(2,1,1,3)
【问题讨论】:
如何计算R中同时包含数字和非数字字符的字符串中非数字字符的数量
例如:
c("ab34","f354","q64423","abf3")
我希望输出是:
c(2,1,1,3)
【问题讨论】:
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) trimws在问题的示例中,数字始终位于末尾(或者即使它们位于开头),我们可以将它们修剪掉,然后计算剩下的内容。 p>
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
【讨论】: