#-------------------------------------------------

# 自作のクロス集計関数

# 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")