我正在尝试编写我的第一个函数和ifelse语句来识别数据帧的一列中的异常值。我首先创建了一个新列,其中异常值应标记为(dat$outliers = NULL)
,然后编写我的函数
outliers<-function(x){
for (Column1 in x) {
if (Column1 < 90) {
1
} else if (Column1 > 130){
1
} else
0
}
}
但是,我收到以下错误:
if(Column1&lt; 90){:缺少值为TRUE / FALSE时出错 需要另外:警告消息:1:在if(Column1&lt; 90){:
条件的长度> 1,只有第一个元素 使用
我意识到这可能是一个非常笨重的方式来解决这个问题,但几乎没有编程经验,我很难在网上理解参考资料。
答案 0 :(得分:3)
if
和else
采用标量logical值。 ifelse
进行矢量化逻辑比较,但在这种情况下你并不需要它。
is_outlier <- function(x) {
x < 90 | x > 130
}
请注意,您的函数现在返回一个逻辑向量而不是一个或零。
我将您的函数重命名为is
(对于返回逻辑值以“is”或“has”开头的函数,通常会这样做。)
进一步阅读错误和警告:
Error In R: Missing Value where TRUE/FALSE needed
Interpreting "condition has length > 1" warning from `if` function
答案 1 :(得分:2)
简单地
is.outlier <- (x<90 | x>130) #returns vector of TRUE/FALSE
或者如果你需要的只是指数,
outliers <- which(x<90 | x>130)