R:茎叶图问题

时间:2017-10-03 01:05:48

标签: r plot

我有以下矢量:

x <- c(54.11, 58.09, 60.82, 86.59, 89.92, 91.61,
       95.03, 95.03, 96.77, 98.52, 100.29, 102.07,
       102.07, 107.51, 113.10, 130.70, 130.70, 138.93,
       147.41, 149.57, 153.94, 158.37, 165.13, 201.06,
       208.67, 235.06, 240.53, 251.65,254.47, 254.47, 333.29)

我想在R中获得以下茎和叶图:

Stem Leaf
5    4 8
6    0
8    6 9
9    1 5 5 6 8
10   0 2 2 7
11   3
13   0 0 8
14   7 9
15   3 8
16   5
20   1 8
23   5
24   0
25   1 4 4
33   3

但是,当我在R中尝试使用stem()函数时,我得到了以下内容:

> stem(x)

  The decimal point is 2 digit(s) to the right of the |

  0 | 566999
  1 | 000000011334
  1 | 55567
  2 | 0144
  2 | 555
  3 | 3

> stem(x, scale = 2)

  The decimal point is 1 digit(s) to the right of the |

   4 | 48
   6 | 1
   8 | 7025579
  10 | 02283
  12 | 119
  14 | 7048
  16 | 5
  18 | 
  20 | 19
  22 | 5
  24 | 1244
  26 | 
  28 | 
  30 | 
  32 | 3

问题:我是否在stem()函数中错过了一个参数?如果没有,还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

我相信你想要的东西有点不标准:一个茎叶应该在它的左边 等距 数字/数字,你'要求不规则间隔。我理解你对54和58在40s内分组的挫折感,但是茎叶图实际上只是水平直方图的文本表示,而侧面的数字反映了经常开始/结束的“箱”。在已知数据之外。将scale(x, scale=2)左数字数字视为40-59,60-79等

你可能已经尝试了这个,但是

stem(x, scale=3)
#   The decimal point is 1 digit(s) to the right of the |
#    5 | 48
#    6 | 1
#    7 | 
#    8 | 7
#    9 | 025579
#   10 | 0228
#   11 | 3
#   12 | 
#   13 | 119
#   14 | 7
#   15 | 048
#   16 | 5
#   17 | 
#   18 | 
#   19 | 
#   20 | 19
#   21 | 
#   22 | 
#   23 | 5
#   24 | 1
#   25 | 244
#   26 | 
#   27 | 
#   28 | 
#   29 | 
#   30 | 
#   31 | 
#   32 | 
#   33 | 3

这是一个良好的开端,并且“适当”,因为箱子大小相同。

如果你必须删除空行(对我来说仍然具有统计意义,相关性,信息性等),那么因为stem的默认值是打印到控制台,你需要捕获控制台输出(可能在rmarkdown文档中有问题),过滤掉空行,并将它们重新cat到控制台。

cat(Filter(function(s) grepl("decimal|\\|.*[0-9]", s),
           capture.output(stem(x, scale=3))),
    sep="\n")
#   The decimal point is 1 digit(s) to the right of the |
#    5 | 48
#    6 | 1
#    8 | 7
#    9 | 025579
#   10 | 0228
#   11 | 3
#   13 | 119
#   14 | 7
#   15 | 048
#   16 | 5
#   20 | 19
#   23 | 5
#   24 | 1
#   25 | 244
#   33 | 3

(我的grepl正则表达式可能会被改进以处理类似于“如果有管道,然后必须跟随一个或多个数字”的东西,但我认为现在这已足够了。)

有一些不平等,你需要6 | 0,但是你的60.82正在四舍五入到61(比如“1”)。如果您确实希望60.82为6 | 0,请使用stem(trunc(x), scale=3)截断它。这不是确切的,但我猜这是因为你的样本输出是手抖的。