【问题标题】:Get different combinations of words获取不同的单词组合
【发布时间】:2015-10-14 10:17:13
【问题描述】:

我有一个字符串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 中以最简单的方式实现这一目标?

编辑:

我试过跟随。但它似乎给出了所有可能的组合,在这种情况下很难过滤掉我需要的情况。

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

【问题讨论】:

    标签: r text


    【解决方案1】:

    一种选择是split 字符串按空格(strsplit(str1, ' ')),按“v1”长度的序列循环,获取“v1”的combn 序列,paste 输出中的元素列 (apply(..., 2, ...))、unlistpaste。我们可以创建一个函数 ('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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多