2013-05-14 4 views
7

Я пытался научиться использовать функцию summary() из пакета Hmisc для генерации кросс-таблиц, которые включают тесты с проверкой. С помощью этой доски я почти там. Я просто не могу понять, как получить процент строк, а не столбцов.Процент строк в crosstable, сгенерированный из summary() из пакета Hmisc

#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() имеет дополнительный аргумент «весело», но это у меня над головой, чтобы заставить его сделать строки проценты ...

Пожалуйста, помогите

ответ

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") 
+1

A.m.a.z.i.n.g .. –

0

По какой-то причине я не могу добавить комментарий. Я попробовал решение jwijjfels, но он не работал. Оказывается, Hmisc изменился, поэтому в Hmisc 3.14-3 вам необходимо внести следующие изменения:

Редактировать строку 15-21 в формате Hmisc :::Cats в следующую и заменить эту функцию на formatCats, как описано 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