行来自Hmisc包中的summary()生成的crosstable的百分比

时间:2013-05-14 09:48:50

标签: r row percentage crosstab hmisc

我一直在努力学习使用Hmisc-package中的summary()函数来生成包含chisquared测试的crosstables。在这个董事会的帮助下,我几乎就在那里。我只是无法弄清楚如何获得行百分比而不是列百分比。

#Data:
v1 <- sample(letters[8:12],200,replace=TRUE)
v2 <- sample(letters[1:2],200,replace=TRUE)
month <- sample(month.name[7:9],200,replace=TRUE)
df <- data.frame(v1,v2,month)

#Table:
latex(    summary( month  ~ v1 + v2 , data=df,  method="reverse" ,test=TRUE),        exclude1=FALSE,file="",booktabs=TRUE,long=TRUE)

哪个让我这样: enter image description here

这让我获得了列百分比。我正在寻找一种方法来扭转它,所以我得到行百分比。我一直在搜索Hmisc文档中的“行”和“列”和“百分比”,但没有运气。 summary.formular()函数有一个可选的参数“fun”但是让我做它的行百分比是我的头脑......

请帮助

2 个答案:

答案 0 :(得分:5)

如果你使用Hmisc :: formatCats进行一些修改。即,将MARGIN从2更改为1.您可以到达那里。

formatCats的一部分

denom <- if (type == 1) apply(tab, 2, sum) else group.freq
pct <- 100 * (if (ncol(tab) > 1) sweep(tab, 2, denom, FUN = "/") else tab/denom)

更改为

denom <- if (type == 1) apply(tab, 1, sum) else group.freq
pct <- 100 * (if (ncol(tab) > 1) sweep(tab, 1, denom, FUN = "/") else tab/denom)

我使用名为myformatCats的这个修改过的函数在https://gist.github.com/jwijffels/5599349做了一个要点。获取它,在Hmisc命名空间中分配它以覆盖Hmisc :: formatCats并打印出col pct。

require(Hmisc)
require(devtools)
source_gist("5599349")
assignInNamespace(x="formatCats", value=myformatCats, ns="Hmisc")

v1 <- sample(letters[8:12],200,replace=TRUE)
v2 <- sample(letters[1:2],200,replace=TRUE)
month <- sample(month.name[7:9],200,replace=TRUE)
df <- data.frame(v1,v2,month)
summary( month  ~ v1 + v2 , data=df,  method="reverse")

答案 1 :(得分:0)

出于某种原因,我无法添加评论。我试过jwijjfels的解决方案,但它没有用。原来Hmisc已经改变,所以在Hmisc 3.14-3中你必须做出以下改变:

将Hmisc ::: formatCats中的第15-21行编辑为以下内容,并使用formatWats替换此函数,如jwijffels所述。

denom <- if (type == 1) 
    apply(tab, 1, sum)
  else group.freq
pct <- if (ncol(tab) > 1) 
   sweep(tab, 1, denom, FUN = "/")
  else tab/denom