【问题标题】:Finding all possible combination of a vector查找向量的所有可能组合
【发布时间】:2016-03-09 07:48:10
【问题描述】:

我有一个字符串向量v = c("abc", "csb", "csfd", "dds", "edds")。 我想使用向量 v 的元素生成小于或等于长度 n 的所有可能组合。

我尝试了combn 函数,它给出了类似这样的结果

>>combn(v,2)

     [,1]  [,2]   [,3]  [,4]   [,5]   [,6]  [,7]   [,8]   [,9]   [,10] 
[1,] "abc" "abc"  "abc" "abc"  "csb"  "csb" "csb"  "csfd" "csfd" "dds" 
[2,] "csb" "csfd" "dds" "edds" "csfd" "dds" "edds" "dds"  "edds" "edds"

但我也想要重复字符串和较低程度的术语的组合。例如,如果 n = 2 那么输出应该是这样的

     [,1]  [,2]   [,3]  [,4]   [,5]   [,6]  [,7]   [,8]   [,9]   [,10] 
[1,] "abc" "csb" "csfd" "dds" "edds" "abc" "abc"  "abc"  "abc"  " csb"  
[2,] ""      ""     ""    ""    ""   "abc" "csb" "csfd"  "edds" "edds"

和其他术语。

【问题讨论】:

  • 试试n <- 2; lapply(seq(n), function(i) combn(v,i))

标签: r string combinations


【解决方案1】:

我们用lapply循环遍历'n'的序列,指定combn中的'm'作为循环值,得到combn输出的转置,转换为data.frame然后rbind list 的元素使用rbindlist(来自data.table)和fill=TRUE

library(data.table)
n <- 2
lst <- lapply(seq(n), function(i) as.data.frame(t(combn(v,i))))
rbindlist(lst, fill=TRUE)
#      V1   V2
# 1:  abc   NA
# 2:  csb   NA
# 3: csfd   NA
# 4:  dds   NA
# 5: edds   NA
# 6:  abc  csb
# 7:  abc csfd
# 8:  abc  dds
# 9:  abc edds
#10:  csb csfd
#11:  csb  dds
#12:  csb edds
#13: csfd  dds
#14: csfd edds
#15:  dds edds

如果我们需要所有组合,请使用expand.grid

lst <- lapply(seq(n), function(i) expand.grid(rep(list(v), i)))
rbindlist(lst, fill=TRUE)
#    Var1 Var2
# 1:  abc   NA
# 2:  csb   NA
# 3: csfd   NA
# 4:  dds   NA
# 5: edds   NA
# 6:  abc  abc
# 7:  csb  abc
# 8: csfd  abc
# 9:  dds  abc
#10: edds  abc
#11:  abc  csb
#12:  csb  csb
#13: csfd  csb
#14:  dds  csb
#15: edds  csb
#16:  abc csfd
#17:  csb csfd
#18: csfd csfd
#19:  dds csfd
#20: edds csfd
#21:  abc  dds
#22:  csb  dds
#23: csfd  dds
#24:  dds  dds
#25: edds  dds
#26:  abc edds
#27:  csb edds
#28: csfd edds
#29:  dds edds
#30: edds edds

【讨论】:

  • 但这不包含重复的术语,如 abc 和 abc 等。请参阅所需输出中的第 6 列。
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多