首页 文章

计算R中的现有排列

提问于
浏览 1400
1

我有一个包含IDNum,Var1,Var2,Var3,Var4,Var5,Var6列的大型数据集 . 变量是布尔值,值为0或1.每行可以是64种不同的可能排列之一 . 我想计算对应于每个排列的行数 . 有没有一种有效的方法在R中写这个?

2 回答

  • 2

    aggregate 可以做到这一点 . 这是一个较短的例子:

    r <- function() rbinom(10, 1, .5)
    d <- data.frame(IDNum=1:10, Var1=r(), Var2=r())
    d
       IDNum Var1 Var2
    1      1    0    1
    2      2    0    1
    3      3    0    0
    4      4    1    0
    5      5    1    1
    6      6    0    0
    7      7    1    1
    8      8    1    0
    9      9    0    1
    10    10    0    1
    

    现在计算每个组合的数量:

    > aggregate(d$IDNum, d[-1], FUN=length)
      Var1 Var2 x
    1    0    0 2
    2    1    0 2
    3    0    1 4
    4    1    1 2
    

    d$IDNum 中的值实际上并未在此处使用,但必须将某些内容传递给 length 函数 . 每个组合的 d$IDNum 中的值将传递给 length 以获取计数 .

  • 1

    这会产生略微不同的结果,并列出所有可能性,无论它们是否存在 . 示例数据:

    nam <- c("IDNum",paste0("Var",1:6))
    n <- 5
    set.seed(23)
    dat <- setNames(data.frame(1:n,replicate(6,sample(0:1,n,replace=TRUE))),nam)
    
    
    #  IDNum Var1 Var2 Var3 Var4 Var5 Var6
    #1     1    1    0    1    0    1    1
    #2     2    0    1    1    1    0    1
    #3     3    0    1    0    1    0    1
    #4     4    1    1    0    1    1    0
    #5     5    1    1    1    1    0    1
    

    算上来:

    data.frame(table(dat[-1]))
    
    #   Var1 Var2 Var3 Var4 Var5 Var6 Freq
    #1     0    0    0    0    0    0    0
    #...
    #28    1    1    0    1    1    0    1
    #...
    #43    0    1    0    1    0    1    1
    #...
    #47    0    1    1    1    0    1    1
    #48    1    1    1    1    0    1    1
    #...
    #54    1    0    1    0    1    1    1
    #...
    #64    1    1    1    1    1    1    0
    

相关问题