【问题标题】:Counting existing permutations in R计算 R 中的现有排列
【发布时间】:2014-06-29 06:57:10
【问题描述】:

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

【问题讨论】:

  • 不是排列,而是变化。见this chart。用这个比喻:“你能用 2 位 0,1 组成多少个 6 位数字?”

标签: r algorithm permutation


【解决方案1】:

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,因为它完全符合我的期望,非常简单/紧凑,并且使用聚合,我需要将其添加到我的词汇表中。第二个也是一个很好的学习机会。
【解决方案2】:

这将给出稍微不同的结果,并列出所有可能性,无论它们是否存在。示例数据:

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

【讨论】:

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