1

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

类似的东西,“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 问题吗?

4

1 回答 1

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)
于 2014-06-17T15:05:26.967 回答