R 查找长度为n的所有可能的子字符串

R 查找长度为n的所有可能的子字符串,r,R,我有一个有趣的问题(也许只对我来说):)。我有如下文字: "abbba" 问题是在这个字符串中找到所有可能的长度为n的子字符串。例如,如果n=2,则子字符串为 'ab','bb','ba' 'abb','bbb','bba' 如果n=3,则子字符串为 'ab','bb','ba' 'abb','bbb','bba' 我想用这样的方法: x <- 'abbba' m <- matrix(strsplit(x, '')[[1]], nrow=2) apply(m, 2, pas

我有一个有趣的问题(也许只对我来说):)。我有如下文字:

"abbba"
问题是在这个字符串中找到所有可能的长度为n的子字符串。例如,如果
n=2
,则子字符串为

'ab','bb','ba'
'abb','bbb','bba'
如果
n=3
,则子字符串为

'ab','bb','ba'
'abb','bbb','bba'
我想用这样的方法:

x <- 'abbba'
m <- matrix(strsplit(x, '')[[1]], nrow=2)
apply(m, 2, paste, collapse='')

x使用
combn
所有向量组合将按列排列。先拆分向量,然后转置结果将得到矩阵形式的结果。然后它可以与矩阵上的
do.call(粘贴,…)
组合为数据帧:

mat <- unique(t(combn(strsplit(x, "")[[1]],2)))
do.call(paste0, as.data.frame(mat))
#[1] "ab" "aa" "bb" "ba"
编辑

仅当您正在搜索所有组合时才使用此解决方案。如果您只是寻求滚动拆分,请使用Julius的答案。

我们可以使用

x <- "abbba"
allsubstr <- function(x, n) unique(substring(x, 1:(nchar(x) - n + 1), n:nchar(x)))
allsubstr(x, 2)
# [1] "ab" "bb" "ba"
allsubstr(x, 3)
# [1] "abb" "bbb" "bba"

x在第一个示例中,您缺少
'aa'
对吗?是的,因为输入文本不包含'aa'。嗯,事实上,我认为,找到给定长度的所有可能元素组合,然后变灰将有效。有什么想法可以实现吗?
?combn
可能就是你想要的。这可以做得非常独特(combn(strsplit(“abbba”),fixed=TRUE)[[1L]],2,FUN=paste,collapse=”)
@RichardScriven,谢谢,当前版本是受你删除答案的启发;在我认为
子字符串
在第二个和第三个参数上没有矢量化之前。@朱利叶斯,你知道为什么斜杠的行为很奇怪吗?它将返回长度为3的字符串,即使指定的n=2似乎忽略了斜杠。@Alexander,我不确定你的意思,我无法重现任何问题。在您的情况下,
x
是什么以及预期的输出?@Julius
x
是从文件中读取的一行。我想搜索字符串“\t”。我设置了
n=2
,但带有“\t”的字符串也有一个额外的字符。@Alexander,这是因为
\t
被视为制表符;请参见
?引号
。这会导致
nchar
以及
子字符串出现问题。