my.median <- function (x, accuracy=0)
{
median <- median.sub(x)
if ((ntie <- length(x[x == median])) != 1 && accuracy > 0) {
x <- c(x[x != median], (median-(ntie+1)*accuracy/2/ntie)+1:ntie/ntie)
median <- median.sub(x)
}
return(median)
}
median.sub <- function(x)
{
n <- length(x)
half <- (n + 1)/2
if (n%%2 == 1) {
sort(x, partial = half)[half]
}
else {
sum(sort(x, partial = c(half, half + 1))[c(half, half + 1)])/2
}
}
# 使用例
> x <- c(1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5)
> median(x)
# [1] 3
> my.median(x, accuracy=1)
# [1] 3.125
http://aoki2.si.gunma-u.ac.jp/lecture/Univariate/median.html 参照