【问题标题】:use ifelse to create new column in r使用 ifelse 在 r 中创建新列
【发布时间】:2018-12-23 05:41:21
【问题描述】:

我的代码是:

data$E<-ifelse(data$D==data$B, "b", ifelse(data$D==data$C, "c", "unknowwn"))

结果:

  A   B   C   D   E
1 16  16  NA  16  b
2 20  NA  20  20  NA
3 24  NA  NA  24  NA

但我想要的是:

  A   B   C   D   E
1 16  16  NA  16  b
2 20  NA  20  20  c
3 24  NA  NA  24  unknowwn

有人知道如何解决这个问题吗? 谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow!请提供example data 以使您的问题可重现!

标签: r if-statement


【解决方案1】:
data$E <- ifelse(!is.na(data$B) & data$D == data$B, "b", 
            ifelse(!is.na(data$C) & data$D == data$C, "c", "unknowwn"))

【讨论】:

    【解决方案2】:

    您的情况有点复杂,因为您需要考虑B、C 或D 中的任何一列是否包含NA。因此,您可以尝试考虑将dplyr::case_when 用作:

    已编辑:根据@A.Suliman 的建议,无需检查is.na 和case_when。

    library(dplyr)
    
    data %>% mutate( E = case_when(
      D==B ~ "b",
      D==C ~ "c",
      TRUE ~ "Unknown"
    ))
    
    #    A  B  C  D       E
    # 1 16 16 NA 16       b
    # 2 20 NA 20 20       c
    # 3 24 NA NA 24 Unknown
    

    数据:

    data <- read.table(text= 
    "A   B   C   D   
    1 16  16  NA  16  
    2 20  NA  20  20
    3 24  NA  NA  24",
    header = TRUE)
    

    【讨论】:

    • 不需要用case_when 测试NA,我认为dplyr 很神奇。查看数据 %>% mutate(E = case_when(D==B ~ 'b',D==C ~ 'C', TRUE ~ 'Unknown'))
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2013-06-19
    相关资源
    最近更新 更多