我正在使用cut函数将我的数据拆分为相同的bin,它可以完成工作,但我对它返回值的方式不满意.我需要的是箱子的中心而不是上端和下端.
我也尝试过使用cut2{Hmisc}
,这给了我每个箱子的中心,但是它在包含相同数量的观察的箱子中划分数据范围,而不是长度相同.
有人有解决方案吗?
Aar*_*ica 10
用这样的东西来制作休息和标签并不难.这里由于中点是单个数字,我实际上并不返回带标签的因子,而是返回数字向量.
cut2 <- function(x, breaks) {
r <- range(x)
b <- seq(r[1], r[2], length=2*breaks+1)
brk <- b[0:breaks*2+1]
mid <- b[1:breaks*2]
brk[1] <- brk[1]-0.01
k <- cut(x, breaks=brk, labels=FALSE)
mid[k]
}
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法来获得bin中断和中点; 我没想到这很难.
请注意,这个答案与约书亚的答案不同; 他给出了每个箱子中数据的中位数,而这给出了每个箱子的中心.
> head(cut2(x,3))
[1] 16.666667 3.333333 16.666667 3.333333 16.666667 16.666667
> head(ave(x, cut(x,3), FUN=median))
[1] 18 2 18 2 18 18
Run Code Online (Sandbox Code Playgroud)
使用ave
如下:
set.seed(21)
x <- sample(0:20, 100, replace=TRUE)
xCenter <- ave(x, cut(x,3), FUN=median)
Run Code Online (Sandbox Code Playgroud)