如何将boxplot的数字输出(使用plot = FALSE)转换为可用的?

时间:2012-01-13 01:36:10

标签: r boxplot

我成功使用boxplot函数生成... boxplots。现在我需要生成包含boxplot计算的统计数据的表格,以便创建绘图。

我使用plot=FALSE选项执行此操作。

问题在于,这会以一种相当奇怪的格式生成数据,而我根本无法做任何事情。这是一个例子:

structure(list(stats = structure(c(178.998262143545, 182.227431564442, 
202.108456373209, 220.375358994654, 221.990406228232, 216.59986775699, 
217.054997032148, 228.509462713206, 267.070720949859, 284.832378859975, 
189.864120937198, 201.876421960518, 219.525439081472, 234.260088973545, 
279.343359793024, 209.472617639903, 209.526516071858, 214.785213079737, 
230.027361556731, 240.0647114578, 202.057148813419, 207.375619207685, 
220.093663781351, 226.246698737471, 240.343646265795), .Dim = c(5L, 
5L)), n = c(4, 6, 8, 4, 8), conf = structure(c(171.971593703341, 
232.245319043076, 196.247705331772, 260.771220094641, 201.435457751239, 
237.615420411705, 198.589545146688, 230.980881012787, 209.552007821332, 
230.635319741371), .Dim = c(2L, 5L)), out = numeric(0), group = numeric(0), 
names = c("U", "UM", "M", "LM", "L")), .Names = c("stats", "n", "conf", "out", "group", 
"names"))

我想要的是每个统计数据的表格 - 最小值,最大值,中位数和四分位数 - 以及每个组的值(“名称”中的值)。

有人可以帮我一把吗?我非常喜欢R初学者。

提前致谢!

3 个答案:

答案 0 :(得分:23)

boxplot在R中返回一个名为list的结构。

列表或多或少是一个数据容器,您可以在其中按名称引用元素。 如果您A <- boxplot(...),则可以使用names访问A$names,使用conf访问A$conf等。

因此,查看boxplot下的?boxplot帮助文件Value:(告诉您boxplot返回的内容),我们看到它返回一个包含以下组件的列表:

   stats: a matrix, each column contains the extreme of the lower
          whisker, the lower hinge, the median, the upper hinge and the
          extreme of the upper whisker for one group/plot.  If all the
          inputs have the same class attribute, so will this component.
       n: a vector with the number of observations in each group.    
    conf: a matrix where each column contains the lower and upper
          extremes of the notch.    
     out: the values of any data points which lie beyond the extremes
          of the whiskers.    
   group: a vector of the same length as ‘out’ whose elements indicate
          to which group the outlier belongs.    
   names: a vector of names for the groups.

因此,每个统计数据的表格都在A$stats中,每列属于一个组,包含最小值,下四分位数,中位数,上四分位数和最大值。

你可以这样做:

A <- boxplot(...)
mytable <- A$stats
colnames(mytable)<-A$names
rownames(mytable)<-c('min','lower quartile','median','upper quartile','max')
mytable 

返回(对于mytable):

                      U       UM        M       LM        L
min            178.9983 216.5999 189.8641 209.4726 202.0571
lower quartile 182.2274 217.0550 201.8764 209.5265 207.3756
median         202.1085 228.5095 219.5254 214.7852 220.0937
upper quartile 220.3754 267.0707 234.2601 230.0274 226.2467
max            221.9904 284.8324 279.3434 240.0647 240.3436

然后你可以像mytable['min','U']那样引用它。

答案 1 :(得分:4)

如果你真的想要数据的分位数而不是boxplot数字,那么直接使用quantile将是我的选择(如果你仔细阅读以后的内容,它会更容易阅读。)

quantile (x, probs = c (0, .25, .5,.75, 1))

quantile本身不适用于组,但您可以将其与aggregate结合使用,以便为参数by中给出的每个组调用它(需要是列表,所以你可以在这里结合几个分组因素):

aggregate (chondro$x, by = list (chondro$clusters), 
           FUN = quantile, probs = c (0, .25, .5,.75, 1))

结果:

   Group.1   x.0%  x.25%  x.50%  x.75% x.100%
1  matrix -11.55  -6.55   5.45  14.45  22.45
2  lacuna -11.55  -2.55   4.45  10.45  22.45
3    cell  -8.55  -1.55  11.45  15.45  20.45

如果您真的想要包装箱图号(例如胡须的走向),请查看? fivenum? boxplot.stats

答案 2 :(得分:1)

其他人回答了关于boxplot函数的返回对象的具体问题,我想补充一点,如果你想了解一般的返回对象,那么你应该真正了解列表以及如何使用{ {1}}函数通常会为您提供一个更有意义的对象视图,然后显示上面显示的内容。 str包中还有TkListView函数,可以对列表和其他对象进行更具交互性的探索。使用TeachingDemosstr以及子集(请参阅help(“[”))将让您了解返回对象中的内容(创建该对象的函数的帮助页面也是开始的好地方)以及如何访问你想要的作品。