【问题标题】:How to generate an output satisfied with specific conditions from expand.grid in R如何从 R 中的 expand.grid 生成满足特定条件的输出
【发布时间】:2012-02-17 18:22:53
【问题描述】:

我正在运行expand.grid 函数。举个简单的例子,

a <- c(1,2,3,"X","Y","M") 
b is identical as b.

如果我选择expand.grid(a,b),它会返回所有对,包括对角线元素 -- (1,1),(2,2),....(y,y),以及第一个元素对大于第二个 --(2,1),(3,2)(x,1),...等。 (但实际上,这里不是数字比较,因为有一些字符,如 x,y)我想在输出中排除这些对。如何使用 expand.grid 函数或任何其他函数来简单地生成没有它们的输出?

【问题讨论】:

    标签: r


    【解决方案1】:
     eg <- expand.grid(a=1:4, b=1:4)
    
    > eg[eg$a < eg$b, ]
       a b
    5  1 2
    9  1 3
    10 2 3
    13 1 4
    14 2 4
    15 3 4
    

    这里是另一个可能有用的函数combn,它返回一个需要转置的矩阵才能得到你想要的:

    > data.frame(t(combn(x=1:4, m=2)))
      X1 X2
    1  1  2
    2  1  3
    3  1  4
    4  2  3
    5  2  4
    6  3  4
    

    【讨论】:

      【解决方案2】:

      对 Vincent Zoonekynd 的轻微修改将处理非数字因素:

      a <- c(1,2,3,"X","Y","M")
      eg <- expand.grid(a,a)
      eg2 <- eg[as.character(eg$Var1) < as.character(eg$Var2), ]
      

      基本上,您需要使用字符串比较,而不是对因子变量不起作用的“普通”比较。

      【讨论】:

        【解决方案3】:

        你可以只取你感兴趣的子集:

        a <- b <- 1:5
        subset( expand.grid(a,b), Var1 < Var2 )
        

        【讨论】:

        • 对不起,我刚刚编辑了我的问题,在 a,b 中有一些字符,例如
        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        相关资源
        最近更新 更多