r - 计算字符串中非数字字符的数量
问题描述
如何计算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)修剪在问题的示例中,数字始终位于末尾(或者即使它们位于开头),我们可以将它们修剪掉,然后计算剩下的内容。
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
推荐阅读
- c# - 如何获取用户在 Frame 中导航到的上一页的值?
- python - 用于素数分解的 Python 代码创建了一个奇怪的 TypeError
- java - 将文本文件放入二维数组(数独网格)
- laravel-5 - CentOS 7 上 Laravel 的存储目录的权限问题。使用 chmod 和 chown 更改权限和所有权并不能解决问题
- linux - 您无权访问此服务器上的 /pgadmin4
- c# - 无论如何我可以将 JavaScript 对象声明为模式中的数据类型吗?
- python - django-admin 找不到设置模块
- mpdf - 当内容达到一定宽度时,mPDF 会创建一个额外的空白页。我怎样才能摆脱多余的空白页?
- crystal-lang - 为什么我不能在 `lib` 范围内定义函数?
- javascript - 如何通过代理通过javascript查询LRS