#-------------------------------------------------
# 自作のクロス集計関数
# table()に相対度数と周辺度数を追加
# m=1(行和),m=2(列和)
#-------------------------------------------------
myTable <- function(x,y,m){
x.lab <- levels(x); x.num <- length(x.lab)
y.lab <- levels(y); y.num <- length(y.lab)
c.tab <- table(x,y); p.tab <- prop.table(c.tab,m)
if(m==1){
rownames(c.tab) <- paste(x.lab,"count",sep=".")
rownames(p.tab) <- paste(x.lab,"prop",sep=".")
tab <- rbind(c.tab,p.tab)
tab <- tab[sort(rownames(tab)),]
tab <- addmargins(tab,2)
}
else{
colnames(c.tab) <- paste(y.lab,"count",sep=".")
colnames(p.tab) <- paste(y.lab,"prop",sep=".")
tab <- cbind(c.tab,p.tab)
tab <- tab[,sort(colnames(tab))]
tab <- addmargins(tab,1)
}
return(tab)
}
# サンプルデータ
data(iris)
attach(iris)
cl <- Species
sl <- cut(Sepal.Length,breaks=quantile(Sepal.Length,prob=seq(0,1,1/2)))
detach(iris)
#使用例
xtab1 <- myTable(cl,sl,1) # 行和(横)
xtab2 <- myTable(cl,sl,2) # 列和(縦)
# csvファイルへの保存
write.csv(xtab1,file="c:/xtab1.csv")
write.csv(xtab2,file="c:/xtab2.csv")