R 循环/重复字符串,直到达到给定长度,然后计数特定字母
我的问题如下: 假设我有一个字符串R 循环/重复字符串,直到达到给定长度,然后计数特定字母,r,R,我的问题如下: 假设我有一个字符串abc和一个数字10。我想将字符串扩展为abcabca(在末尾添加a) 基本上,我试图做的是将给定字符串s中的字符扩展一个给定的数字n,并计算某个字母出现的次数 我正在寻找一种更好的方法来实现上述目标。我有一个可以工作的函数,但它给出了由cbind()引起的警告 代码/数据: repeatedString <- function(n, s, l){ split_strings = strsplit(s, '')[[1]] make_sequence
abc
和一个数字10
。我想将字符串扩展为abcabca
(在末尾添加a
)
基本上,我试图做的是将给定字符串s
中的字符扩展一个给定的数字n
,并计算某个字母出现的次数
我正在寻找一种更好的方法来实现上述目标。我有一个可以工作的函数,但它给出了由cbind()
引起的警告
代码/数据:
repeatedString <- function(n, s, l){
split_strings = strsplit(s, '')[[1]]
make_sequences = seq(from = 1, to = n)
extend_characters = cbind(split_strings, make_sequences)
s_seq = extend_characters[,1]
occurrences = sum(s_seq == l)
return(occurrences)
}
repeatedString(n = 10, s = "abc", l = "c")
repeatedString拆分字符串,然后使用length.out
参数rep
函数通过循环其元素将字符串扩展到lengthn
x = "abc"
n = 10
sapply(strsplit(x, ""), function(s){
paste(rep(s, length.out = n), collapse = "")
})
#[1] "abcabcabca"
生成字符串的另一种可能性是:
n <- 10
x <- c("abc", "abcde", "ab")
substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n)
[1] "abcabcabca" "abcdeabcde" "ababababab"
性能方面的一个小比较(只是字符串的生成):
x谢谢!我稍微改变了你的解决方案,因为我想一步一步地看问题<代码>重复字符串
x_n <- substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n)
sapply(x_n, function(x) length(grepRaw("a", x, all = TRUE, fixed = TRUE)))
abcabcabca abcdeabcde ababababab
4 2 5
x <- rep(x, 1000000)
library(microbenchmark)
microbenchmark(
tmfmnk = substr(strrep(x, (floor(n/nchar(x)) + 1)), 1, n),
d.b = sapply(strsplit(x, ""),
function(s) paste(rep(s, length.out = n), collapse = "")),
times = 5)
Unit: seconds
expr min lq mean median uq max neval
tmfmnk 1.540213 1.568921 1.60646 1.569343 1.669179 1.684643 5
d.b 15.722021 16.437724 17.05823 17.022109 17.205378 18.903920 5