计算字符串向量中连续数字的函数
Function to count of consecutive digits in a string vector
我想创建一个函数,该函数采用至少包含 1 个元素并包含数字 2 到 5 的字符串对象,并确定是否存在长度至少为 N 的连续数字,其中 N 是实际数字值。
如果是,return 字符串为真,否则return 字符串为假。
例如:
Input: "555123"
Output: false
因为5只找到了3次而不是5次
或:
Input: "57333"
Output: true
因为 3 正好被找到 3 次。
您可以检查 table
中的值是否对应于 names
。
x <- c('555123', '57333')
f <- \(x) {
s <- strsplit(x, '')
lapply(s, \(x) {
tb <- table(x)
names(tb) == tb
}) |> setNames(x)
}
f(x)
# $`555123`
# x
# 1 2 3 5
# TRUE FALSE FALSE FALSE
#
# $`57333`
# x
# 3 5 7
# TRUE FALSE FALSE
尝试 rle
+ strsplit
如果你使用的是 base R
f <- function(s) {
with(
rle(unlist(strsplit(s, ""))),
any(as.numeric(values) <= lengths & lengths > 1)
)
}
你会看到
> f("555123")
[1] FALSE
> f("57333")
[1] TRUE
聚会迟到了,但也许仍然值得您光顾:
数据:
x <- c("555123", "57333", "21112", "12345", "22144", "44440")
用允许的数字定义向量:
digits <- 2:5
定义具有多个反向引用的交替模式:
patt <- paste0("(", digits, ")\", c(1, digits), "{", digits - 1, "}", collapse = "|")
将patt
输入str_detect
:
library(stringr)
str_detect(x, patt)
[1] FALSE TRUE FALSE FALSE TRUE TRUE
另一种方式是:
my_func <- function(x) {
as.numeric(unlist(strsplit(x, ""))) -> all
table(all[all %in% 2:5]) -> f
any(names(f) == f)
}
# Input <- "555123"
# (my_func(Input))
# FALSE
# Input <- "57333"
# (my_func(Input))
# TRUE
我想创建一个函数,该函数采用至少包含 1 个元素并包含数字 2 到 5 的字符串对象,并确定是否存在长度至少为 N 的连续数字,其中 N 是实际数字值。
如果是,return 字符串为真,否则return 字符串为假。
例如:
Input: "555123"
Output: false
因为5只找到了3次而不是5次
或:
Input: "57333"
Output: true
因为 3 正好被找到 3 次。
您可以检查 table
中的值是否对应于 names
。
x <- c('555123', '57333')
f <- \(x) {
s <- strsplit(x, '')
lapply(s, \(x) {
tb <- table(x)
names(tb) == tb
}) |> setNames(x)
}
f(x)
# $`555123`
# x
# 1 2 3 5
# TRUE FALSE FALSE FALSE
#
# $`57333`
# x
# 3 5 7
# TRUE FALSE FALSE
尝试 rle
+ strsplit
如果你使用的是 base R
f <- function(s) {
with(
rle(unlist(strsplit(s, ""))),
any(as.numeric(values) <= lengths & lengths > 1)
)
}
你会看到
> f("555123")
[1] FALSE
> f("57333")
[1] TRUE
聚会迟到了,但也许仍然值得您光顾:
数据:
x <- c("555123", "57333", "21112", "12345", "22144", "44440")
用允许的数字定义向量:
digits <- 2:5
定义具有多个反向引用的交替模式:
patt <- paste0("(", digits, ")\", c(1, digits), "{", digits - 1, "}", collapse = "|")
将patt
输入str_detect
:
library(stringr)
str_detect(x, patt)
[1] FALSE TRUE FALSE FALSE TRUE TRUE
另一种方式是:
my_func <- function(x) {
as.numeric(unlist(strsplit(x, ""))) -> all
table(all[all %in% 2:5]) -> f
any(names(f) == f)
}
# Input <- "555123"
# (my_func(Input))
# FALSE
# Input <- "57333"
# (my_func(Input))
# TRUE