分位数函数误差

时间:2014-06-17 15:01:51

标签: r quantile

我想在数据框中“截断”高于或低于分位数的值。

类似的东西,“TRUNC”是一个矩阵:

for ( i in 1 : ncol (TRUNC) ) {
for ( j in 1 : nrow (TRUNC) ) {
if ( (TRUNC[i,j] > quantile(TRUNC,probs=0.995,na.rm=T) ) || (TRUNC[i,j] <
quantile(TRUNC,probs=0.005,na.rm=T) ) ) {
TRUNC[i,j] = NA } } }

但我总是收到类似的错误消息:

Fehler in if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x)))
stop("missing values and NaN's not allowed if 'na.rm' is FALSE") : 
Argument kann nicht als logischer Wert interpretiert werden
Zusätzlich: Warnmeldung:
In if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x)))
stop("missing values and NaN's not allowed if 'na.rm' is FALSE") :
Bedingung hat Länge > 1 und nur das erste Element wird benutzt

所以我尝试了一个简单的例子:

A=matrix(seq(1,8),nrow=4)
A[2,2]=NA
quantile(A,probs=0.5)

这也给了我同样的错误。

即使我尝试这样的事情:

B=as.vector(A)
quantile(B,na.rm=T)

它不起作用!

如果有人能向我解释一个解决方案,我将非常感激!

我的代码出了什么问题?是不是na.rm = T应该解决数据集中的NA问题?

1 个答案:

答案 0 :(得分:2)

嗯......在na.rm=TRUE的通话中使用quantile。问题可能是您将变量T定义为评估为FALSE的其他内容。这对我有用:

A=matrix(seq(1,8),nrow=4)
A[2,2]=NA
quantile(A,probs=0.5, na.rm=TRUE)