R:茎叶图问题

R:茎叶图问题,r,plot,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

我有以下向量:

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()函数时,我得到了如下结果:

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

我相信你想要的是一点非标准:茎和叶的左边应该有等间距的数字/数字,而你要求的是不规则间距的。我理解你的沮丧,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(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
regex可能会得到改进,以处理类似于“如果有管道,那么它后面必须跟一个或多个数字”的内容,但我认为这就足够了。)


有一些不平等,你想要
6 | 0
,但是你的60.82四舍五入到61(因此是“1”)。如果您确实希望60.82成为
6 | 0
,请使用
stem(trunc(x),scale=3)将其截断。这并不准确,但我猜这是因为您的样本输出是手动干扰的。

我相信您想要的是有点不标准:茎和叶的左侧应该有等间距的数字/数字,而您要求的是不规则间距的。我理解你的沮丧,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(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
regex可能会得到改进,以处理类似于“如果有管道,那么它后面必须跟一个或多个数字”的内容,但我认为这就足够了。)

有一些不平等,你想要
6 | 0
,但是你的60.82四舍五入到61(因此是“1”)。如果您确实希望60.82成为
6 | 0
,请使用
stem(trunc(x),scale=3)将其截断。这并不准确,但我猜这是因为您的样本输出是手动干扰的