【问题标题】:Add conditions to expand grid in R?在R中添加条件以扩展网格?
【发布时间】:2019-12-23 16:04:26
【问题描述】:

是否有将条件/限制合并到 R 中的expand.grid 中?

例如,如何防止在创建网格时出现c(1,1,1)c(2,2,2) 的组合?是否有一个可扩展的解决方案可以在许多限制下工作?我的网格很大,我的内存无法处理它,例如Error: cannot allocate vector of size 32.0 Gb,因此在创建网格后进行子集化不是一种选择。

expand.grid(A = rep(1:2),
            B = rep(1:3),
            C = rep(1:4))

下面的代码不起作用:

expand.grid(A[!((A==1 & B==1 & C==1) & (A==2 & B==2 & C==2))] = rep(1:2),
            B[!((A==1 & B==1 & C==1) & (A==2 & B==2 & C==2))] = rep(1:3),
            C[!((A==1 & B==1 & C==1) & (A==2 & B==2 & C==2))] = rep(1:4))

as.data.frame(expand.grid(A = rep(1:2),
                          B = rep(1:3),
                          C = rep(1:4)))[!((A==1 & B==1 & C==1) & (A==2 & B==2 & C==2))]

谢谢!

【问题讨论】:

  • 您显示的代码不起作用,因为尚未创建 ABC

标签: r combinations


【解决方案1】:

如果我们创建数据集

d1 <-  expand.grid(A = rep(1:2),
        B = rep(1:3),
        C = rep(1:4))

可以使用rowSums检查数据是否等于第一列

d1[!!rowSums(d1 != d1[,1]),]

【讨论】:

    【解决方案2】:

    只需分配 expand.grid 数据框,然后运行所需的逻辑,您可以通过比较所有列之间的相等性来缩短这些逻辑(根据相等的传递属性不需要A==C):

    d1 <-  expand.grid(A = rep(1:2),
                       B = rep(1:3),
                       C = rep(1:4))
    
    d1 <-  with(d1, d1[!(A==B & B==C),])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 2022-06-29
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多