我正在尝试使用大量NA条目来优化数据帧,并且我需要在winsorization之后保留NA条目。数据帧中的列需要在较低端进行精细化(即小值),但在上端需要一些winsorization(即大值)。我已经创建了一个几乎可以完成工作的函数,但我似乎无法使函数返回它们出现的NA条目。
这是一个例子。
# vector with an NA entry & upper-end value needs winsorization
a <- c(1:3,NA,90)
# my function
winsor <- function(x)
{ y <- quantile(x,probs=.95,na.rm=T)
sapply(x, function(x) {
if ( x>=y ){
x <- y
}
else { x <- x}
})
# returned vector after apply winsor to my object, a.
z <- as.data.frame(winsor(a))
执行此操作时得到的结果会出现以下错误:
if(x&gt; = y){:缺少值需要TRUE / FALSE时出错
但它仍会返回以下向量(这就是我想要的,期望它不会根据需要返回NA条目)。
a
1.000
2.000
3.000
85.824
将非常感谢任何帮助,以及将此功能操作到整个数据框的扩展。希望这一切都有意义。这是我的第一篇文章(希望我的例子可以重现!)。
答案 0 :(得分:0)
winsor函数最终需要}
。我冒昧地调整了代码:
winsor <- function(x){
y <- quantile(x,probs=.95,na.rm=T)
sapply(x, function(x) {
if(!is.na(x)){
if(x>=y ){
x <- y
}
else { x <- x}
}
})
}
z<-data.frame(winsor=as.numeric(unlist(winsor(a))))