我做了一个箱形图,比较了男子游泳奥运会运动员的年龄,然后他们是否获得了奖牌。我想知道如何编写代码以获得没有奖牌的盒子图的五个数字摘要和带奖牌的盒子图(我将奖章改为一个因子)。我尝试summary(age,medal.f)
和summary(age~medal.f)
似乎没有任何工作/我不知道如何分离箱形图。有关如何做到这一点的任何想法?
答案 0 :(得分:6)
获取此信息的最简单方法是保存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