我想創建一個函式,該函式采用至少 1 個元素的字串物件并包含數字 2 到 5,并確定是否存在長度至少為 N 的連續數字,其中 N 是實際數字值。
如果是,則回傳字串 true,否則回傳字串 false。
例如:
Input: "555123"
Output: false
因為 5 只找到了 3 次而不是 5。
或者:
Input: "57333"
Output: true
因為 3 正好被找到 3 次。
uj5u.com熱心網友回復:
如果您正在使用基礎 R,請嘗試rle strsplit
f <- function(s) {
with(
rle(unlist(strsplit(s, ""))),
any(as.numeric(values) <= lengths & lengths > 1)
)
}
你會看到
> f("555123")
[1] FALSE
> f("57333")
[1] TRUE
uj5u.com熱心網友回復:
您可以檢查中的值是否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
uj5u.com熱心網友回復:
運行長度編碼函式rle可用于計算字串中值的連續出現次數,使用該any函式查看是否滿足任何查詢的長度。
f <- function(s){
ff = Vectorize(\(x, i) any(x$lengths[x$values == i] >= i), "i")
s = rle(strsplit(s, "")[[1]])
any(ff(s, 2:5))
}
f("555123")
[1] FALSE
f("57333")
[1] TRUE
uj5u.com熱心網友回復:
聚會遲到,但也許仍然值得你花時間:
資料:
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
uj5u.com熱心網友回復:
另一種方法是:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398010.html
