2013-03-03 1 views
2

Я пытался использовать пакет Hmisc для создания вывода, аналогичного приведенному ниже.Использование пакета Hmisc (R) для создания отчета о прохождении (SAS), например вывода?

          Group 
Step  Method     G1   G2   G3 ....... 

s1   m1   N   45   26   17 
         Min   2    2   3 
         Max   7    6   4 
         Mean   3.5   4.5  2.5 
         Sdev   2.6   3.6   1 

      m2   N   
         Min   
         Max   
         Mean   
         Sdev 

s2   m1   N   
         Min   
         Max   
         Mean   
         Sdev   

      m2   N   
         Min   
         Max   
         Mean   
         Sdev  

Мои исходные данные выглядят ниже.

 Site Step Method Group Outcome 
     a1  s1  m1  g1  3.6 
     a1  s1  m4  g1  2.3 
     a2  s2  m1  g2  14 
     a3  s1  m3  g1  7 
     a3  s3  m6  g1  1 
     a4  s1  m1  g3  6.2 

Я пытаюсь вычислить п, мин, средние, SDEV, и максимум для всех места исходов в каждой группе, за шагом и методом. Я использую сайты как свои уникальные идентификаторы. Не каждый сайт имеет каждый шаг, и не каждый шаг имеет каждый метод, поэтому отсутствуют значения. Я играл с пакетом Hmisc и смог вычислить n, mean, min и max, используя fun=summary, , но я смог сделать это только для каждого метода отдельно, и он отображается не так симпатичная матрица. Я знаю, что пакет использует латекс (я полный новичок с этим), и я использовал этот параметр в summary(....,file="data.tex"). Я думаю, что он должен сохранить файл .dvi, который я нажимаю правой кнопкой мыши и рассказываю ему скрытно в формате pdf, но pdf полностью разбит, глядя с данными в неправильном месте. Я действительно не знаю, что я делаю неправильно, поэтому любая обратная связь/ввод очень приветствуются. Cheers.

ответ

2

tabular функция в tables пакет был создан для создания таблиц SAS. Вы можете попробовать что-то вроде этого (dat неоспоримые вашего примера данных):

library(tables) 
(tab1 <- tabular(Step*Method*Heading()*Outcome*((n = 1) + min + max + mean + sd) ~ Group, 
     data = dat)) 

        Group   
Step Method  g1 g2 g3 
s1 m1  n  1.0  0 1.0 
      min 3.6 Inf 6.2 
      max 3.6 -Inf 6.2 
      mean 3.6 NaN 6.2 
      sd  NA NA NA 
     m3  n  1.0  0 0.0 
      min 7.0 Inf Inf 
      max 7.0 -Inf -Inf 
      mean 7.0 NaN NaN 
      sd  NA NA NA 
      ... ... ... ... 

Для дальнейшей обработки данных, с латексом, например, latex(tab1) создает красиво отформатированный латекс табличный.

Примечания: Вы можете легко улучшить форматирование таблицы, как это:

tabular(Step*RowFactor(Method, levelnames = c("M1", "M2", "M3", "M4"), spacing = 1)* 
       Heading()*Outcome* 
       (Format()*(N= 1) + (Min = min) + (Max = max) + (Mean = mean) + 
        (Sdev = sd)) ~ 
       Factor(Group, levelnames = c("G1", "G2", "G3")), 
     data = dat) 

также их применение для всех сайтов прямо вперед, используя tabular(Site*Step*...)

+0

Это именно то, что я искал. Я получил таблицу, чтобы работать, но я натыкаюсь на некоторые ошибки. Главное, что когда я пытаюсь запустить табличное для всех методов сразу, я получаю ошибку «слишком сложная оценка: бесконечная рекурсия/параметры (выражения =)?». Я получаю табличную работу, когда я делаю один метод за один раз, но, когда я делаю латекс (tab1), чтобы дать мне латексный код, и я его скопирую и вставив, я получаю сообщение об ошибке «Missing \ begin {document}» в моей вещи Tex. Спасибо за совет. – user2117897

+0

как для первого номера, трудно сказать без данных и кода, который вы использовали. Можете ли вы опубликовать код, который вы использовали, который вызвал ошибку? И ваши данные свободно доступны в Интернете? – adibender

+1

Что касается второй проблемы: латекс (tab1) дает вам только латексный код для таблицы, в вашем документе вам нужно поставить его между \ documentclass {article} \ begin {document} ... \ end {document}, где ... это код, созданный латексом (tab1), но это скорее проблема латекса, а не R – adibender

2

Я предполагаю, что не забочусь о форматировании (который может быть неправильным), вы могли бы просто использовать функцию aggregate :)

# run any function, grouped by whatever variables you want.. 
aggregate(Outcome ~ Step + Method + Group , data = x , summary) 

# the summary function doesn't include standard deviations, 
# so run that separately 
aggregate(Outcome ~ Step + Method + Group , data = x , sd) 

при условии, что ваши данные выглядят следующим образом ..

# read in your data 
x <- read.table(h = T , text = "Site Step Method Group Outcome 
     a1  s1  m1  g1  3.6 
     a1  s1  m4  g1  2.3 
     a2  s2  m1  g2  14 
     a3  s1  m3  g1  7 
     a3  s3  m6  g1  1 
     a4  s1  m1  g3  6.2") 

Если вы просто выполняете задание по группам, посмотрите на ?aggregate и ?tapply и в будущем укажите groupwise в ваших поисковых запросах.

, если вы хотите, чтобы запустить все это в одной строке, вы можете быстро создать пользовательскую функцию, которая просто комки выход summary вместе с выходом sd ..

# alternatively, you can tack a standard deviation onto the summary function if you like.. 
swsd <- function(x) c(summary(x) , sd(x)) 

# ..and then run that through `aggregate` instead :) 
aggregate(Outcome ~ Step + Method + Group , data = x , swsd) 
+0

Спасибо за вход. – user2117897

Смежные вопросы