R If或Ifelse语句 - 执行代码是否为dataframe列条件为true或false

时间:2016-01-21 23:58:24

标签: r if-statement dataframe

当我尝试使用myfunction1来计算final1的值时,我收到错误(底部)和错误的值。但是,我可以使用myfunction2来正确计算final1的值。我想确定final1的值而不必计算temp1temp2,因为'final1'是通过更复杂的方程确定的,可能会降低性能。这是可能的,如果是这样,我将如何执行此操作?谢谢!

# code resulting in error of column_2 calculation
myfunction1 = function(x) {
  if(x <= 0){
    final1 = 500
  } else {
    final1 = 250
  }
  return(final1)
}

column_1 = c(-3.5, -2.5, -1.5, 0.5, 1.5, 2.5, 3.5)
df_1 = data.frame(column_1)
df_1$column_2 = myfunction1(df_1$column_1)

# working code
myfunction2 = function(x) {
  temp1 = 500
  temp2 = 250
  final1 = ifelse(x <=0, temp1, temp2)
  return(final1)
}

column_A = c(-3.5, -2.5, -1.5, 0.5, 1.5, 2.5, 3.5)
df_A = data.frame(column_A)
df_A$column_B = myfunction2(df_A$column_A)

以下是警告信息:

Warning message:
In if (x <= 0) { :
  the condition has length > 1 and only the first element will be used

1 个答案:

答案 0 :(得分:2)

如果您只想计算被替换的行的替换值,那么我认为分配到子集是要采用的方式......正如@thelatemail在第一条评论中所建议的那样。它可能看起来像这样:

myfunction3 = function(x) {
    y = numeric(length(x))
    y[x <= 0] <- 500
    y[x > 0] <- 250
    return(y)
}

我认为你过分简化了你的例子,让我们说你希望结果是每个mean组的x。这应该给出一个更好的意义,因为我们实际上正在进行计算,但只是为必要的组进行评估。

myfunction4 = function(x) {
    y = numeric(length(x))
    y[x <= 0] = mean(x[x <= 0])
    y[x > 0] = mean(x[x > 0])
}

如@ 42所示,我还建议您阅读Difference between if() and ifelse()以更好地了解这些功能何时合适。