以下のスクリプトは私の質問を示しています。
library(reshape2)
set.seed(1)
dummy.df <- data.frame(var_a=sample(letters[1:5],200,replace=TRUE),
var_b=sample(1:5,200,replace=TRUE),
stringsAsFactors=FALSE)
temp1 <- addmargins(table(dummy.df[,c("var_a","var_b")]),1)
temp2 <- formatC(addmargins(prop.table(table(dummy.df[,c("var_a","var_b")]),2),1)*100,digits=2,format="f")
temp1.melt <- melt(temp1,id.vars="var_a")
temp2.melt <- melt(temp2,id.vars="var_a")
temp.output <- merge(temp1.melt,temp2.melt,by=c("var_a","var_b"))
temp.output[,"value"] <- paste(temp.output[,"value.x"]," (",temp.output[,"value.y"],"%)",sep="")
temp.output[,"var_a"] <- factor(temp.output[,"var_a"],levels=c("a","b","c","d","e","Sum"))
temp.output <- dcast(temp.output,formula=var_a~var_b,value.var="value")
オフィスでの私の通常の仕事の1つは、異なる変数間の頻度をリストするテーブルを作成することです。通常、テーブルにはパーセンテージ(行/列のパーセンテージ)も含めます。
addmargins
関数、、prop.table
を知る前に、パッケージからas.data.frame.matrix
多くのを使用melt
してトリックを実行します(つまり、テーブルをデータフレームに変換し、適切な除算を行ってパーセンテージを指定してから、それを実行します)。これで、3つの新しい学習関数を使用すると、多くのコードを節約できることがわかりました。dcast
reshape2
melt
dcast
ここで、上記のスクリプトを使用せずに、これが一歩先に進み、実際の数の横に行/列のパーセンテージが存在するテーブルを作成できるかどうか疑問に思います。