【问题标题】:R function combination of vectors向量的R函数组合
【发布时间】:2020-05-14 22:18:17
【问题描述】:

我有一个包含 3 个元素的向量 tempo <- c("VAR1", "VAR2", "VAR3")

有没有一个函数可以给我这些元素的所有组合而不重复? 我想要这样的结果:tempo2 <- c("VAR1", "VAR2", "VAR3", "VAR1 + VAR2", "VAR1 + VAR3", "VAR2 + VAR3")

我第一次尝试使用expand.grid(tempo,tempo),但它给了我“VAR1 VAR2”和“VAR2 VAR1”。

你有什么想法吗?

非常感谢!!

【问题讨论】:

  • 试试combn c(tempo, combn(tempo, 2, FUN = paste, collapse=" + "))
  • do.call(c, lapply(seq_along(tempo), combn, x = tempo, simplify = FALSE))

标签: r


【解决方案1】:

你走的很好

@library(tidyverse) 
tempo <- c("VAR1", "VAR2", "VAR3")

您不需要这些因素;他们会碍事的。

expand.grid(tempo,tempo, stringsAsFactors = FALSE)  %>% 
    # Generate all the combinations, but sort them before you paste them into a string.
  mutate(Combo = map2_chr(Var1, Var2,
         ~ paste(sort(unique(c(.x, .y))), collapse = " + "))) %>% 
    # You've cut down the combinations to only those in sort-order
  pull(Combo) %>% 
    # Get rid of the duplicates
  unique

# [1] "VAR1"        "VAR1 + VAR2" "VAR1 + VAR3" "VAR2"        "VAR2 + VAR3" "VAR3"       

Q.E.D.

【讨论】:

    【解决方案2】:

    我们可以使用combn

    c(tempo, combn(tempo, 2, FUN = paste, collapse=" + "))
    

    【讨论】:

      【解决方案3】:

      如果您需要基于集合的解决方案,可以试试这个。如果不需要,您将不得不调整循环索引以停止在 2 并删除 NULL 集。

      library("sets")
      all_sub = NULL
      for (i in 1:length(x)) {
        all_sub = set_union(all_sub, set_combn(x,i))
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 2021-08-22
        • 2015-10-19
        相关资源
        最近更新 更多