使用Hmisc包(R)生成类似过程报告(SAS)的输出?

使用Hmisc包(R)生成类似过程报告(SAS)的输出?,r,hmisc,R,Hmisc,我一直在尝试使用Hmisc包来产生类似于下面的输出 Group Step Method G1 G2 G3 ....... s1 m1 N 45 26 17 Min 2

我一直在尝试使用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在错误的位置上显示数据时被破坏了。我真的不知道我做错了什么,所以非常感谢任何反馈/意见。
干杯

我假设您不关心格式(可能不正确),您可以使用
aggregate
函数:)

假设您的数据如下所示

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

tables
包中的
tabular
函数用于创建类似SAS的表。 您可以尝试以下方法(
dat
being您的示例数据):


同样,使用
表格(Site*Step*…)

这正是我一直在寻找的东西。我得到了表格工作,但遇到了一些错误。最主要的一点是,当我尝试同时为所有方法运行tablar时,我得到了错误“计算嵌套太深:无限递归/选项(表达式=)?”。当我一次只使用一个方法时,我会使用tabular,但是当我使用latex(tab1)给我latex代码时,我复制并粘贴了它,在我的Tex东西中会出现错误“Missing\begin{document}”。谢谢你的建议。至于第一个问题,如果没有你使用的数据和代码,很难说。你能发布你触发错误的代码吗?您的数据可以在web上自由访问吗?至于第二个问题:latex(tab1)只提供表的latex代码,在您的文档中,您需要将它放在\documentclass{article}\begin{document}…\end{document}之间,其中。。。代码是由latex生成的(表1),但这更多的是latex问题,而不是RThanks。我消除了无限递归错误。我想这是我反应向量中的一个隐藏字符。我把它拿出来,它现在就跑了。我也创建了pdf,但是输出在页面上被截断,它只打印一页输出,即使它需要第二页。@user2117897:试试latex(tab1,options=list(tablar=“longtable”))
# 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")
# 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 )
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
             ...   ...   ...  ...
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)