如何使用if else语句标记异常值?

时间:2014-10-15 14:17:38

标签: r function if-statement

我正在尝试编写我的第一个函数和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,只有第一个元素   使用

我意识到这可能是一个非常笨重的方式来解决这个问题,但几乎没有编程经验,我很难在网上理解参考资料。

2 个答案:

答案 0 :(得分:3)

ifelse采用标量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)