找到所有可能的长度为n

时间:2016-02-22 18:56:54

标签: r

我有一个有趣的(仅限我,也许,:))问题。我有这样的文字:

"abbba"

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

'ab','bb','ba'

如果n = 3,则子串是

'abb','bbb','bba'

我想用这样的东西:

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

但是我得到了一个警告,它对len = 3不起作用。

2 个答案:

答案 0 :(得分:10)

我们可以使用

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"

其中substringx提取从指定位置开始和结束的子字符串。我们利用substring进行矢量化并将1:(nchar(x) - n + 1)作为起始位置并将n:nchar(x)作为结束位置的事实。

答案 1 :(得分:2)

使用$('.filter').each(function () { var filterName = $(this).attr("id"); var filterArray = filterName + "Filter"; if(typeof(window[filterArray]) == 'undefined' || window[filterArray] == null) window[filterArray] = new Array(); $(this).find('a').on( 'click', function( event ) { var $target = $( event.currentTarget ); var val = $target.attr( 'data-value' ); var $input = $target.find( 'input' ); var idx; if ( ( idx = window[filterArray].indexOf( val ) ) > -1 ) { window[filterArray].splice( idx, 1 ); setTimeout( function() { $input.prop( 'checked', false ) }, 0); } else { window[filterArray].push( val ); setTimeout( function() { $input.prop( 'checked', true ) }, 0); } }); }); ,矢量的所有组合将按列排列。事先拆分向量并转置结果将得到结果作为矩阵。然后可以将其与矩阵上的combn组合作为数据框:

do.call(paste,...)

<强>更新

我们还可以使用更短的语法(@docendo)指定mat <- unique(t(combn(strsplit(x, "")[[1]],2))) do.call(paste0, as.data.frame(mat)) #[1] "ab" "aa" "bb" "ba" 处理组合的方式:

combn

修改

仅在您正在寻找所有组合时才使用此解决方案。如果您只是寻求滚动拆分,请使用Julius&#39;答案。