假设我有一个像这样的向量:
mydata = c(1, 3, 4, 5, 6, 7, 8, 9, 10)
五个中断的直方图如下所示:
h = hist(mydata, breaks=5)
如何仅绘制频率计数高于阈值的垃圾箱?在这种情况下,任何大于1的计数。
我想得出以下直方图:
我知道我可以使用h$counts
和h$breaks
来访问计数和中断,但是我想不出一种简单的方法来使用它们来过滤出某些垃圾箱。
答案 0 :(得分:1)
在这种特殊情况下,您可以这样操作,但不能将其推广到连续的垃圾箱和直方图的左端。
f <- -which(h$counts < 2)
h[1:4] <- lapply(h[1:4], "[", f)
h
# $breaks
# [1] 2 4 6 8 10
#
# $counts
# [1] 2 2 2 2
#
# $density
# [1] 0.1111111 0.1111111 0.1111111 0.1111111
#
# $mids
# [1] 3 5 7 9
#
# $xname
# [1] "mydata"
#
# $equidist
# [1] TRUE
#
# attr(,"class")
# [1] "histogram"
如果您要涵盖bin两端的情况,则必须增加一些代码复杂性。
mydata <- c(1, 3, 4, 5, 6, 7, 8, 9, 10, 12)
h <- hist(mydata, breaks=6)
f1 <- h$counts < 2
f2 <- rle(f1)
if (length(f2$lengths) == 3) {
f2$lengths[2] <- f2$lengths[2] + 1
f2 <- which(inverse.rle(f2))
} else {
f2 <- which(f1)
}
h[2:4] <- lapply(h[2:4], "[", !f1)
h[[1]] <- h[[1]][-f2]
plot(h)
答案 1 :(得分:0)
您可以直接操纵hist
返回的对象并对其进行绘制:
h$counts[ h$counts < 2 ] <- 0
plot(h)
答案 2 :(得分:0)
我假设如果低于阈值的存储桶位于直方图的中间,则只想删除该存储桶。
鉴于此,只需将轴限制调整为第一个和最后一个非零存储区即可。
到目前为止,初始直方图
mydata2 <- c(1, 3, 4, 5, 6, 7, 3, 9, 10, 12)
h2 <- hist(mydata2, breaks=6)
它会像这样变
h2$counts[ h2$counts < 2] <- 0
xmin <- h2$breaks[min(which(h2$counts != 0))]
xmax <- h2$breaks[max(which(h2$counts != 0)) + 1]
plot(h2, xlim = c(xmin, xmax))
如果要将中间存储桶合并到其他频率,则变得更加复杂,并且取决于要使用的合并规则。