使用:
mean (x, trim=0.05)
Run Code Online (Sandbox Code Playgroud)
从分布的每一侧移除2.5%,这对于对称的双尾数据是好的.但是,如果我有一个有尾或高度不对称的数据,我希望能够只删除分布的一侧.有这个功能还是我自己写了一个新功能?如果是这样,怎么样?
只需创建一个修改过的mean.default.首先来看看mean.default:
mean.default
Run Code Online (Sandbox Code Playgroud)
然后修改它以接受新参数:
mean.default <-
function (x, trim = 0, na.rm = FALSE, ..., side="both")
{
if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
warning("argument is not numeric or logical: returning NA")
return(NA_real_)
}
if (na.rm)
x <- x[!is.na(x)]
if (!is.numeric(trim) || length(trim) != 1L)
stop("'trim' must be numeric of length one")
n <- length(x)
if (trim > 0 && n) {
if (is.complex(x))
stop("trimmed means are not defined for complex data")
if (any(is.na(x)))
return(NA_real_)
if (trim >= 0.5)
return(stats::median(x, na.rm = FALSE))
lo <- if( side=="both" || side=="right" ){ floor(n * trim) + 1 }else{1}
hi <- if( side=="both" || side=="left" ){ n + 1 - (floor(n * trim) + 1 ) }else{ n}
x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi]
cat(c(length(x), lo , hi) )
}
.Internal(mean(x))
}
Run Code Online (Sandbox Code Playgroud)
我不知道有什么功能。像下面这样的东西会在取平均值之前修剪掉分布的上尾部。
upper.trim.mean <- function(x,trim) {
x <- sort(x)
mean(x[1:floor(length(x)*(1-trim))])
}
Run Code Online (Sandbox Code Playgroud)