R 将单词拆分为长度组合

R 将单词拆分为长度组合,r,split,tokenize,R,Split,Tokenize,我在R中寻找一个函数,它将给定一个整数,允许我将一个单词拆分为该长度组合,但具有滚动效果 例如,函数(“stackoverflow”,4)将呈现: c("stac", "tack", "acko", "ckov", "kove", "over", "verf", "rflo", "flow") 你们知道这个函数是否存在,或者我必须创建它吗 ## install.packages("zoo") x <- unlist(strsplit("stackoverflow","")) zoo::

我在R中寻找一个函数,它将给定一个整数,允许我将一个单词拆分为该长度组合,但具有滚动效果

例如,
函数(“stackoverflow”,4)
将呈现:

c("stac", "tack", "acko", "ckov", "kove", "over", "verf", "rflo", "flow")
你们知道这个函数是否存在,或者我必须创建它吗

## install.packages("zoo")

x <- unlist(strsplit("stackoverflow",""))
zoo::rollapply(x,width=4,FUN = paste0,collapse="")
# [1] "stac" "tack" "acko" "ckov" "kove" "over" "verf" "erfl" "rflo" "flow"
让我们生成一个非常长的玩具字符串:

x <- paste0(rep("a",100000), collapse="")

system.time(foo(x,4))
#   user  system elapsed 
#  2.280   0.004   2.288 

system.time(foo1(x,4))
#   user  system elapsed 
# 10.492   0.000  10.509 

x我们可以使用
base R

substring(s,seq_len(nchar(s)-4+1),4:nchar(s))
数据

s <- "stackoverflow"

s很好的答案和+1。确实,rollapply对于非常长的字符串更快,但是对于“正常”长度的字符串,基本的R版本要快得多(例如try
microbenchmark(foo(“stackoverflow”,4),foo1(“stackoverflow”,4))
)。不是批评,只是为了完整性而发布。对于长字符串,使用基本R方式更快,但使用
stringi::stri_sub
而不是
substring
。谢谢。我不想使用for循环,所以你的要快得多
substring(s,seq_len(nchar(s)-4+1),4:nchar(s))
s <- "stackoverflow"