我有一个包含IDNum,Var1,Var2,Var3,Var4,Var5,Var6列的大型数据集 . 变量是布尔值,值为0或1.每行可以是64种不同的可能排列之一 . 我想计算对应于每个排列的行数 . 有没有一种有效的方法在R中写这个?
aggregate 可以做到这一点 . 这是一个较短的例子:
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 以获取计数 .
d$IDNum
length
这会产生略微不同的结果,并列出所有可能性,无论它们是否存在 . 示例数据:
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
2 回答
aggregate
可以做到这一点 . 这是一个较短的例子:现在计算每个组合的数量:
d$IDNum
中的值实际上并未在此处使用,但必须将某些内容传递给length
函数 . 每个组合的d$IDNum
中的值将传递给length
以获取计数 .这会产生略微不同的结果,并列出所有可能性,无论它们是否存在 . 示例数据:
算上来: