2016-12-23 20 views
1

長さが6文字の文字列a = "100111"があります。私はすべての可能な組み合わせの文字を生成したい。位置1,4,5,6の「1」は「0」になるが、位置2および3の「0」は「0」のままである。文字列の組み合わせをrで生成する

私はstrsplitを使用しようと、その()を使用してそれらを配置し、それらを置き換えることにより0と1を変えることによってループを使用して系列を生成しようと出力

b <- c("000000", "100000", "000100","000010","000001", "100100", 
     "100010", "100001","000011","000101","000110", "000011", ..., "100111") 

したいです。私は出力を得ることができません。

私が遭遇する最初の問題は、すべての文字列を一緒に追加しようとするときです。

誰かがこのシリーズの生成方法を教えてくれますか?ありがとうございました。

答えて

4

あなたはexpand.grid()を使用することができます。

a <- "100111" 
a_split <- strsplit(a, "")[[1]] 
a_list <- lapply(a_split, function(i) 0:i) 
a_cases <- expand.grid(a_list) 
sapply(1:nrow(a_cases), function(i) paste(a_cases[i, ], collapse = "")) 
## [1] "000000" "100000" "000100" "100100" "000010" "100010" "000110" "100110" "000001" "100001" "000101" 
## [12] "100101" "000011" "100011" "000111" "100111" 
2

我々は

a1 <- strsplit(a, "")[[1]] 
i1 <- which(a1==1) 
unlist(lapply(length(i1):0, function(i) 
    combn(i1, i, FUN = function(x) paste(replace(a1, x, 0), collapse="")))) 
#[1] "000000" "000001" "000010" "000100" "100000" "000011" "000101" "000110" 
#[9] "100001" "100010" "100100" "000111" "100011" "100101" "100110" "100111" 
+0

感謝を試すことができます。出力が@Stibuと異なる理由 – Mohanasundar

+0

@Mohanasundar 'expand.grid'はすべての組み合わせを作成しますが、' combn'は必要な組み合わせのみを取得します。たとえば、 'expand.grid(1:3、1:3); combn(1:3,2) 'となります。あなたが期待される出力の組合せの完全なリストを示していないので、私はどちらがあなたが欲しいかわからない – akrun

+0

@akrun私はあなたがちょうど1をゼロに置き換えられないケースを見逃したと思います。 'a 'と同じです)。 'rev(seq_along(i1))'を(例えば) 'length(i1):0'に置き換えると、私が行ったのと同じ結果が得られます。 – Stibu

関連する問題