R 用变边界等式绘制直方图
我想绘制一个直方图,其中桶由以下内容指定:R 用变边界等式绘制直方图,r,histogram,R,Histogram,我想绘制一个直方图,其中桶由以下内容指定: • 4.25 ≤ E < 4.75 • 4.75 ≤ E < 4.90 • 4.90 ≤ E ≤ 5.10 • 5.10 < E < 5.25 • 5.25 ≤ E ≤ 5.75 •4.25≤ E
• 4.25 ≤ E < 4.75
• 4.75 ≤ E < 4.90
• 4.90 ≤ E ≤ 5.10
• 5.10 < E < 5.25
• 5.25 ≤ E ≤ 5.75
•4.25≤ E<4.75
• 4.75 ≤ E<4.90
• 4.90 ≤ E≤ 5.10
•5.10
请注意,等式是如何在左边界和右边界之间跳跃的。如何在代码中实现这一点?据我所知,base R中没有剪切/断开功能,允许您指定这样的不规则断开。您可以包装
findInterval
来执行一些操作
findInterval2 <- function(x, br, rightmost.closed = FALSE, left.closed=TRUE,
trim=FALSE, labels=NULL) {
r <- findInterval(x, br, rightmost.closed)
closed.left <- c(rep_len(left.closed, length(br)), rightmost.closed)
m <- x %in% br
slideright <- m & r==0 & !left.closed[1]
r[slideright] <- r[slideright] + 1
slideleft <- which(m & r!=0 & !left.closed[ifelse(r==0,NA,r)])
r[slideleft] <- r[slideleft]-1
rng <- 0:length(br)
if(trim) {
r[r<1 | r>length(br)-1] <- NA
rng <- 1:(length(br)-1)
}
if (is.null(labels) || (is.logical(labels) && labels==TRUE)) {
ff <- format(embed(br,2))
labels <- paste0(
ifelse(left.closed, "[","("),
ff[,2], ", ", ff[,1],
ifelse(c(left.closed[-1], rightmost.closed), ")","]")
)
if(!trim) {
labels <- c(
paste0("(-Inf,", ff[1,2], ifelse(left.closed[1], ")","]") ),
labels,
paste0( ifelse(rightmost.closed, "[","("), ff[nrow(ff),1], ", Inf)" )
)
}
} else if (is.logical(labels) && labels==FALSE) {
labels = NULL
}
if (!is.null(labels)) {
r <- factor(r, levels=rng, labels=labels)
}
r
}
应该创造什么
4.25查看函数
中的hist
参数。breaks
rr <- findInterval2(x, br, rightmost.closed=FALSE, left.closed=c(T, T, T, F, T), trim=TRUE)
set.seed(15) br <- c(4.25,4.75, 4.90, 5.10, 5.25, 5.75) x <- runif(45, min(br), max(br)) rr <- findInterval2(x, br, rightmost.closed=FALSE, left.closed=c(T, T, T, F, T), trim=TRUE) barplot(table(rr))