我一直在尝试使用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在数据错误的地方看起来都是破碎的。我真的不知道我做错了什么,所以非常感谢任何反馈/意见。
干杯。
答案 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*...)