7

我一直在尝试学习使用 Hmisc 包中的 summary() 函数来生成包含卡方测试的交叉表。在这个董事会的帮助下,我快到了。我只是不知道如何获得行百分比而不是列百分比。

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

这让我明白了: 在此处输入图像描述

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

请帮忙

4

2 回答 2

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)

我在https://gist.github.com/jwijffels/5599349用这个名为 myformatCats 的修改函数做了一个要点。获取它,在 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")
于 2013-05-17T14:31:09.127 回答
0

由于某种原因,我无法添加评论。我尝试了 jwijjfels 的解决方案,但没有奏效。原来 Hmisc 已更改,因此在 Hmisc 3.14-3 中,您必须进行以下更改:

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

denom <- if (type == 1) 
    apply(tab, 1, sum)
  else group.freq
pct <- if (ncol(tab) > 1) 
   sweep(tab, 1, denom, FUN = "/")
  else tab/denom
于 2014-07-06T21:37:09.500 回答