2011-05-06 4 views
13

잘라 내기 기능을 사용하여 데이터를 균등하게 나눕니다. 작업을 수행하지만 값을 반환하는 방식에 만족하지 않습니다. 내가 필요로하는 것은 위 및 아래 끝이 아닌 빈의 중심입니다.
또한 cut2{Hmisc}을 사용해 보았습니다. 이것은 각 저장소의 중심을 제공하지만 동일한 길이가 아닌 동일한 수의 관측치를 포함하는 저장소의 데이터 범위를 나눕니다.은 동일한 길이의 빈들로 ​​값의 범위를 나눕니다. cut vs cut2

누구에게도 해결책이 있습니까?

답변

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] 
} 

빈 휴지통과 중간 점을 얻는 더 좋은 방법이 있습니다. 나는 그것에 대해 매우 열심히 생각하지 않았다.

이 답변은 Joshua의 답변과 다릅니다. 각 bin의 데이터의 중앙값을 제공하면서 각 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 
7

사용 ave과 같이 :

set.seed(21) 
x <- sample(0:20, 100, replace=TRUE) 
xCenter <- ave(x, cut(x,3), FUN=median) 
관련 문제