我有一个有趣的(仅限我,也许,:))问题。我有这样的文字:
"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不起作用。
答案 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"
其中substring
从x
提取从指定位置开始和结束的子字符串。我们利用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;答案。