代码之家  ›  专栏  ›  技术社区  ›  nak5120

ifelse使用和

  •  -1
  • nak5120  · 技术社区  · 6 年前

    我在下面有一个示例数据集:

    Col1    Col2    Col3
       A       6       9  
       B       7      10
       C       8      11
       C       9      12
       D      10      13
    

    如果col1没有值a和b,那么使col3=col2,如果没有,那么保持原始值。

    最终预期产量:

    Col1    Col2    Col3
       A       6       9  
       B       7      10
       C       8       8
       C       9       9
       D      10      10
    

    这是我的尝试,但没有成功:

    df$Col3 <- ifelse(df$Col1!="A" & df$Col1!="B", df$Col2, df$Col3)
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Eric    6 年前
    library(dplyr)    
    df %>%
      mutate(Col3 = ifelse(Col1 %in% c("A","B"),Col3,Col2))
    
        2
  •  0
  •   glaucon    6 年前

    以下是您问题的真实答案:

    Why can't R's ifelse statements return vectors?

    对于将起作用的代码, case_when 是一个更有用的实现

    library(dplyr)
    
    df %>%
      mutate(Col3 = case_when(
        Col1 %in% c("A","B") ~ Col3,
        TRUE ~ Col2
        )
      )