【发布时间】:2025-11-24 21:25:01
【问题描述】:
我正在尝试创建一个简单的函数来查找异常值并将相应的观察标记为 valid.obs=1 如果它不是异常值,或者 valid.obs=0 如果它确实是一个异常值。 例如,对于变量“income”,将根据以下公式识别异常值:if
income>=(99percentile(income)+standard_deviation(income)),则为异常值。 如果income
rem= function(x){
u=quantile(x,probs=0.99,na.rm=TRUE) #calculating the 99th percentile
s=sapply(x,sd,na.rm=TRUE) #calculating the standard deviation
uc=u+s
v=seq(1,1,length.out = nrow(x))
v[x>=uc]=0
v[x<uc]=1
x$valid.obs=v
return(x)
}
我继续将此函数应用于数据框的单个列。数据框有 132 个变量和 5000 个条目。我选择变量“收入”
apply(data["income"],2,rem)
它,然后显示错误:
Error in seq.default(1, 1, length.out = nrow(x)) :
argument 'length.out' must be of length 1
在函数“rem”之外,下面的代码可以正常工作:
nrow(data["income"])
[1] 5000
我是 R 新手,我的军械库中还没有很多函数。这个函数的目标很简单。请让我知道为什么会出现此错误以及是否有更简单的方法来解决此问题?
【问题讨论】: