2013-07-23 132 views
1

如何使用班級table?我需要用table()結果做一些計算,現在我的unclass表被強制轉換爲數據框。這是很好的做法,或者有更好的(更快)的方法。我下面舉個例子:如何計算班級表

x <- data.frame(a=c(1,1,1,1,1,1,0,0,0,0,0,0,0), 
       b=c('a','a','b','b','a','a','b','b','a','a','b','b','a')) 

t <- table(x$b,x$a) 

t <- data.frame(unclass(t)) 

sum(log((t$X0/sum(t$X0))/(t$X1/sum(t$X1))) * ((t$X0/sum(t$X0)) - (t$X1/sum(t$X1)))) 

編輯:我發現我可以使用prop.table,但問題仍然是相同的:

t <- data.frame(unclass(prop.table(table(x$b,x$a),margin=2))) 

sum(log(t$X0/t$X1) * (t$X0 - t$X1)) 

回答

2

一個table基本上是一個array,使同樣的方法適用:

x <- data.frame(a=c(1,1,1,1,1,1,0,0,0,0,0,0,0), 
       b=c('a','a','b','b','a','a','b','b','a','a','b','b','a')) 

probtable <- prop.table(table(x$b,x$a),margin=2) 
sum(log(probtable[,"0"]/probtable[,"1"]) * (probtable[,"0"] - probtable[,"1"]))