使用Hmisc软件包(R)生成proc报告(SAS),如输出?

时间:2013-03-03 21:31:02

标签: r hmisc

我一直在尝试使用Hmisc包来生成类似于下面的输出。

                                            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

我试图通过步骤和方法计算每组中所有站点结果的n,min,mean,sdev和max。我使用这些网站作为我的唯一标识符。并非每个站点都包含所有步骤,并非每个步骤都包含所有方法,因此缺少值。我一直在使用Hmisc包,并且能够使用fun=summary计算n,mean,min和max, 但我只能单独为每个方法做到这一点,它显示在一个不那么漂亮的矩阵中。我知道该软件包使用latex(我对此总是新手),并且我使用了summary(....,file="data.tex")中的选项我认为是保存.dvi文件,我右键单击并告诉它转换为pdf,但是pdf在数据错误的地方看起来都是破碎的。我真的不知道我做错了什么,所以非常感谢任何反馈/意见。 干杯。

2 个答案:

答案 0 :(得分:3)

我假设您不关心格式化(可能不正确),您可以使用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 )

答案 1 :(得分:3)

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*...)

直接将此应用于所有网站