【问题标题】:Combination search for character vector字符向量的组合搜索
【发布时间】:2018-10-04 02:10:31
【问题描述】:
a<-c('a','b','c','d')

需要将其组合隔离

需要的输出是

(a b c d,a b c,b c d,a b,b c,c d,a,b,c,d)

【问题讨论】:

  • 你的输出背后的逻辑是什么?它是如何选择的?
  • 很确定这是一个骗子:unlist(lapply(seq_along(a), function(m) combn(a, m, simplify=FALSE)), recursive=FALSE)
  • lapply(prevoutput, paste, collapse=“”)
  • 无法获得输出.. 我的意思是我有 1 个字符向量和 1 个数据框作为输入,如果匹配,我会将字符向量中的每个关键字搜索到特定列中,我存储匹配的单词。 a

标签: r pattern-matching character combinations permutation


【解决方案1】:

我使用@chinsoon12 建议和进一步的paste 来获得您所需的输出:

paste(lapply(unlist(lapply(rev(seq_along(a)), function(m) combn(a, m, simplify=FALSE)), recursive=FALSE), paste, collapse=" "), collapse=",")

返回: "a b c d,a b c,a b d,a c d,b c d,a b,a c,a d,b c,b d,c d,a,b,c,d"

【讨论】:

  • 如果我们有一个空格作为输入,比如 a
  • @SarathChandra 您可以使用来自stringr 包的str_split 将带有空格的输入转换为相同的格式。即a &lt;- unlist(str_split(a, " "))
  • 非常感谢@drjones 最后一个疑问是否有机会我只能得到 (a,a b,a b c,a b c d)) 而不是所有概率。
  • @SarathChandra 这将为您提供所需的输出:paste(lapply(1:length(a),FUN=function(x) paste(a[1:x],collapse=" ")),collapse=",")
  • 我可以像 (a,ab,abc,abcd) 一样使用这个输出吗?就像字符的第一个单词,即只是“a”grep(搜索函数)到另一个数据帧,即 df
【解决方案2】:

可以从c('a', 'b', 'c', 'd') = letters[1:4]power set 构建所需的输出。使用 rje 库中的 powerset 函数,我们有:

unlist(lapply(rje::powerSet(letters[1:4])[-1], paste0, collapse = ' '))
[1] "a"       "b"       "a b"     "c"       "a c"     "b c"     "a b c"  
[8] "d"       "a d"     "b d"     "a b d"   "c d"     "a c d"   "b c d"  
[15] "a b c d"

【讨论】:

  • 我可以像 (a,ab,abc,abcd) 一样使用这个输出吗?就像字符的第一个单词,即只是“a”grep(搜索函数)到另一个数据帧,即 df
  • @SarathChandra,我不太确定你在问什么。如果这不能解决您的问题,请编辑您的问题或使用您想要的输出提出另一个问题。
  • 无法获得输出.. 我的意思是我有 1 个字符向量和 1 个数据框作为输入,如果匹配,我会将字符向量中的每个关键字搜索到特定列中,我存储匹配的单词。 a
猜你喜欢
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多