4

我一直在尝试使用 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 包,并且能够使用 计算 n、均值、最小值和最大值fun=summary,但我只能单独为每种方法执行此操作,并且它显示在一个不太漂亮的矩阵中. 我知道这个包使用乳胶(我完全是新手),我已经使用了这个选项summary(....,file="data.tex")我认为是保存一个 .dvi 文件,我右键单击它并告诉它转换为 pdf,但是 pdf 在错误的位置查找数据时全部损坏。我真的不知道我做错了什么,因此非常感谢任何反馈/输入。干杯。

4

2 回答 2

4

包中的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*...)

于 2013-03-03T22:10:20.443 回答
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 )
于 2013-03-03T21:35:50.883 回答