我有一个包含IDNum,Var1,Var2,Var3,Var4,Var5,Var6列的大型数据集。变量是布尔值,值为0或1.每行可以是64种不同的可能排列之一。我想计算对应于每个排列的行数。有没有一种有效的方法在R中写这个?
答案 0 :(得分: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 :(得分: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