【问题标题】:subsets of different vectors R不同向量 R 的子集
【发布时间】:2018-08-24 16:17:31
【问题描述】:

我有如下所示的三个向量。

q = c("a == 1", "a == 2", "a == 3")
w = c("b >= 50", "b >= 100")
t = c("c >= 40 & c <= 80", "c > 80")

我希望能够将所有向量组合成一个大向量,以便每个可能的子集都在一个更大的向量中。例如我想拥有

("a == 1 & b >= 50", "a == 1 & b >= 100", "a ==2 & b >=50",
"a == 2 & b >= 100", "a == 3 & b >= 50", "a == 3 & b >= 100",
"a ==1 & c >= 40 & c <= 80", "a ==1 & c > 80",
"a ==2 & c >= 40 & c <= 80", "a ==2 & c > 80",
"a ==3 & c >= 40 & c <= 80", "a ==3 & c > 80",
"b  >= 50 & c >= 40 & c <= 80", "b >= 50 & c > 80",
"b  >= 100 & c >= 40 & c <= 80", "b >= 100 & c > 80", 
"a == 1 & b >= 50 & c >= 40 & c <= 80", "a == 1 & b >=50 & c > 80",
"a == 2 & b >= 50 & c >= 40 & c <= 80", "a == 2 & b >=50 & c > 80",
"a == 3 & b >= 50 & c >= 40 & c <= 80", "a == 3 & b >=50 & c > 80")
"a == 2 & b >= 100 & c >= 40 & c <= 80", "a == 2 & b >=100 & c > 80",
"a == 3 & b >= 100 & c >= 40 & c <= 80", "a == 3 & b >=100 & c > 80")

所以我需要创建每个子集并用“&”符号连接,但我不想比较同一向量中的任何元素。在这个例子中我也有三个向量,但是向量的数量应该是可变的。有谁知道如何实现这一目标?谢谢!

【问题讨论】:

  • 你需要do.call(paste, c(expand.grid(q, w, t), sep = " &amp; "))
  • 也可以是combn(list(q, w, t), 2, FUN = function(x) do.call(paste, c(x, sep = " &amp; ")), simplify = FALSE)
  • 几乎!我也只需要向量中的 2 个元素。这段代码似乎总是从每个向量中获取 1 个元素,但我也只需要 q 与 w 相比,例如。因此,例如我的示例中的第一个条目“a == 1 & b >= 50”不存在
  • 请检查修改后的代码
  • 有道理,谢谢!

标签: r


【解决方案1】:

我们可以使用expand.gridcombn 创建字符串。在list(使用lapply)中创建list('lst')元素的combn,将list元素扩展为data.framepastedo.call (将sep 指定为" &amp; "

lst <- list(q w, t)
unlist( lapply(2:3, function(i) combn(lst, i, 
    FUN = function(x) do.call(paste, c(expand.grid(x), sep = " & ")), 
         simplify = FALSE)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2015-09-16
    相关资源
    最近更新 更多