我有以下矢量:
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()函数中错过了一个参数?如果没有,还有其他解决方案吗?
答案 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)
截断它。这不是确切的,但我猜这是因为你的样本输出是手抖的。