【问题标题】:if else with multiple conditions and NAif else 有多个条件和 NA
【发布时间】:2015-02-23 22:16:04
【问题描述】:

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

  1. 如果 df$flag = 0 而不是使用 df$corrected
  2. 如果 df$flag = 1 如果它大于修正值,则使用 df$original,否则使用 df$corrected
  3. 如果 df$flag = NA 使用 df$original

样本数据:

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)

感谢您的任何建议。

【问题讨论】:

    标签: r


    【解决方案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 可以解释为逻辑值这一事实。

    【讨论】:

    • 刚刚注意到,当标志为 NA 时,您的解决方案不会返回“原始”(参见条件 3)。任何想法如何纠正?
    • @doncarlos,你是对的。我更新了我的答案(只是改变了条件的顺序 - 现在应该没问题)
    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2015-04-21
    • 2018-11-07
    • 2016-08-05
    相关资源
    最近更新 更多