2014-01-09 42 views
0

創建我的工作中聚合表的大部分時間使用下面的流程彙總數據時,將行/列的總數據:到寫使用plyr和reshape2包中的R

set.seed(1) 
temp.df <- data.frame(var1=sample(letters[1:5],100,replace=TRUE), 
         var2=sample(11:15,100,replace=TRUE)) 
temp.output <- ddply(temp.df, 
        c("var1","var2"), 
        function(df) { 
         data.frame(count=nrow(df)) 
        }) 
temp.output.all <- ddply(temp.df, 
         c("var2"), 
         function(df) { 
          data.frame(var1="all", 
             count=nrow(df)) 
         }) 

temp.output <- rbind(temp.output,temp.output.all) 
temp.output[,"var1"] <- factor(temp.output[,"var1"],levels=c(letters[1:5],"all")) 
temp.output <- dcast(temp.output,formula=var2~var1,value.var="count",fill=0) 

我開始覺得傻「樣板「代碼,以便在創建新聚合表時包含行/列總數,是否有某種方法可以跳過它?

回答

1

看着你想要的輸出(現在我在電腦前),也許你應該看看margins說法dcast

library(reshape2) 
dcast(temp.df, var2 ~ var1, value.var = "var2", 
     fun.aggregate=length, margins = "var1") 
# var2 a b c d e (all) 
# 1 11 3 1 6 4 2 16 
# 2 12 1 3 6 5 5 20 
# 3 13 5 9 3 6 1 24 
# 4 14 4 7 3 6 2 22 
# 5 15 0 5 1 5 7 18 

還應考慮在基地R.的addmargins功能