我做了一个箱形图,比较了男子游泳奥运会运动员的年龄,然后他们是否获得了奖牌.我想知道如何编写代码来获得没有奖牌的盒子图的五个数字摘要和带奖牌的盒子图(我将奖章改为一个因子).我试过了summary(age,medal.f)
,summary(age~medal.f)
似乎没有任何工作/我不知道如何分离箱形图.有关如何做到这一点的任何想法?
获取此信息的最简单方法是保存boxplot()
调用结果并提取$stats
组件.使用内置ToothGrowth
数据集,
b <- boxplot(len~supp,data=ToothGrowth) b$stats ## [,1] [,2] ## [1,] 8.2 4.2 ## [2,] 15.2 11.2 ## [3,] 22.7 16.5 ## [4,] 25.8 23.3 ## [5,] 30.9 33.9
更一般地说,您可以手动执行此类操作
with(data,lapply(split(age,medal),boxplot.stats))
有许多涉及其他的解决方案by()
或plyr
,dplyr
,data.table
包...
再次使用ToothGrowth
:
(bps <- with(ToothGrowth,lapply(split(len,supp),boxplot.stats))) $OJ $OJ$stats [1] 8.2 15.2 22.7 25.8 30.9 $OJ$n [1] 30 $OJ$conf [1] 19.64225 25.75775 $OJ$out numeric(0) $VC $VC$stats [1] 4.2 11.2 16.5 23.3 33.9 $VC$n [1] 30 $VC$conf [1] 13.00955 19.99045 $VC$out numeric(0)
如果您只想要5个数字的摘要,可以按如下方式提取它们:
sapply(bps,"[[","stats") OJ VC [1,] 8.2 4.2 [2,] 15.2 11.2 [3,] 22.7 16.5 [4,] 25.8 23.3 [5,] 30.9 33.9