2015-10-14 3 views
1

У меня есть строка ch, и я хочу получить конкретный результат out. Ниже приведены примеры.получить разные комбинации слов

ch <- "A B" 
out <- "A B AB" 

ch <- "A B C" 
out <- "A B C AB BC AC ABC" 

ch <- "A B C D" 
out <- "A B C D AB BC CD AC AD BD ABC ABD ACD BCD ABCD" 

В основном я хочу, чтобы получить все возможные идти вперед комбинации всех слов, присутствующих в строке, как описано выше.

Как достичь этого самым простым способом в R?

EDIT:

Я пробовал следовать. Но, похоже, это дает все возможные комбинации, и в этом случае будет сложно отфильтровать случаи, в которых я нуждаюсь.

e <- c("A", "B", "C") 
> r <- expand.grid(e, e, e) 
> r 
    Var1 Var2 Var3 
1  A A A 
2  B A A 
3  C A A 
4  A B A 
5  B B A 
6  C B A 
7  A C A 
8  B C A 
9  C C A 
10 A A B 
11 B A B 
12 C A B 
13 A B B 
14 B B B 
15 C B B 
16 A C B 
17 B C B 
18 C C B 
19 A A C 
20 B A C 
21 C A C 
22 A B C 
23 B B C 
24 C B C 
25 A C C 
26 B C C 
27 C C C 

ответ

2

Одним из вариантов было бы split строка пространством (strsplit(str1, ' ')), петли по последовательности длины «v1», получить combn из «v1» для последовательности, paste элементов в выходных столбцов (apply(..., 2, ...)) ., unlist и paste снова мы можем создать функцию («f1»), что делает эти и использовать его для нескольких строк

f1 <- function(str1){ 
    v1 <- strsplit(str1, ' ')[[1]] 
    paste(unlist(sapply(seq(length(v1)), function(i) 
     apply(combn(v1, i), 2, paste, collapse=""))), collapse= ' ') 
    } 

ch <- "A B" 
f1(ch) 
#[1] "A B AB" 

ch <- "A B C"  
f1(ch) 
#[1] "A B C AB AC BC ABC" 

ch <- "A B C D" 
f1(ch) 
#[1] "A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD" 
0

Следующий пример даст вам все возможные комбинации строки:.

public class StringCombinations 
{ 
    private StringBuilder output = new StringBuilder(); 
    private final String inputstring; 

    public StringCombinations(final String str) 
    { 
     inputstring = str; 
     System.out.println("The input string is : " + inputstring); 
    } 

    public static void main(String args[]) 
    { 
     String str = "a b c d"; 
     String string = str.replaceAll("\\s+", ""); 
     StringCombinations combobj = new StringCombinations(string); 
     System.out.println("All possible combinations are : "); 
     combobj.combine(); 
    } 

    public void combine() 
    { 
     combine(0); 
    } 

    private void combine(int start) 
    { 
     for (int i = start; i < inputstring.length(); ++i) 
     { 
      output.append(inputstring.charAt(i)); 
      System.out.println(output); 
      if (i < inputstring.length()) 
       combine(i + 1); 
      output.setLength(output.length() - 1); 
     } 
    } 
} 
Смежные вопросы