我想在数据框中“截断”高于或低于分位数的值。
类似的东西,“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问题?
答案 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)