【问题标题】:R: stem and leaf plot issueR:茎叶图问题
【发布时间】:2017-10-03 01:05:48
【问题描述】:

我有以下向量:

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() 函数中遗漏了一个参数?如果没有,是否有其他解决方案?

【问题讨论】:

    标签: r plot


    【解决方案1】:

    我相信您想要的有点不标准:茎叶应该在其左侧 等距 数字/数字,而你'重新要求不规则间隔。我理解您对 54 和 58 被分组在 40 年代内感到沮丧,但茎叶图实际上只是水平直方图的文本表示,侧面的数字反映了通常开始/结束的“箱”在已知数据之外。将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) 截断它。这不准确,但我猜那是因为您的示例输出被手动卡住了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多