如果有多个条件和NA

时间:2015-02-23 22:16:04

标签: r

使用下面提供的示例,我需要使用具有以下条件的if else语句:

  1. 如果df $ flag = 0,则使用df $ correct
  2. 如果df $ flag = 1使用df $ original如果大于校正,则使用df $ correct
  3. 如果df $ flag = NA则使用df $ original
  4. 示例数据:

    df <- data.frame(
      original =  c(20,40,20,2,20,10,12),
      corrected = c(25,43,22,1,25,7,NA),
      flag = c(0,0,0,1,1,1,NA))
    

    输出应附加到df(df $ final),并且对于此示例应该输出:

    df$final = c(25,43,22,2,25,10,12)
    

    感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

虽然它不是地球上效率最高的代码,但您可以使用嵌套的ifelse

df$final <- with(df, ifelse(is.na(flag), original, 
                            ifelse(flag, pmax(original, corrected), corrected)))
df
#  original corrected flag final
#1       20        25    0    25
#2       40        43    0    43
#3       20        22    0    22
#4        2         1    1     2
#5       20        25    1    25
#6       10         7    1    10
#7       12        NA   NA    12

您可以利用flag可以解释为逻辑值的事实。