Rでクロス表を書く

実は同じことを去年もやっているんだけど、よく分からないコードで、しかもちゃんとしてないということで書きなおしてみた。

cross.table <- function(x,y){
  t <- table(x,y)
  #回答の長さとかによって、marは変更して
  par(mar=c(6,6,6,3))
  col <- 2:(length(levels(y))+1)
  barplot(t(t/apply(t,1,sum)) * 100,
          col=col,horiz=T,axes=F,las=2)
  par(xpd=TRUE)
  title(main=paste(deparse(substitute(x)),"と",deparse(substitute(y)),"のクロス表",sep=""))
  legend((par()$usr[1]+par()$usr[2])/2,par()$usr[3],
         legend=colnames(table(x,y)),col=col,lwd=5)
  axis(3)
}

library(MASS)
attach(quine)
n <- names(quine[-5])

par(ask=TRUE)

apply(combn(n,2),2,
      function(x){
        x1 <- x[1]
        x2 <- x[2]
        eval(parse(text=paste("cross.table(",x1,",",x2,")",sep="")))
      })

f:id:syou6162:20161113003333p:plain