当我在R中使用is.na时,vector返回NA而不是FALSE

时间:2016-10-19 18:59:54

标签: r if-statement na

我想使用ifelse和is.na创建一个新变量。 但问题是这个ifelse只返回1和NA。 问题似乎是我的第一个问题,因为我一个接一个地跑进ifelse,只有第一个返回NA。我无法理解为什么,因为3 ifelse的代码似乎是相似的。有谁知道吗?

eassociacao<-ifelse((!is.na(dados$CENTRAL)|dados$CENTRAL!=" ") & 
                    (!is.na(dados$SISTEMA)|dados$SISTEMA!=" "),1,
                    ifelse((!is.na(dados$CENTRAL)|dados$CENTRAL!=" ") & 
                           (is.na(dados$SISTEMA)|dados$SISTEMA==" "),2,3))

1 个答案:

答案 0 :(得分:2)

有3个非常好的理由不使用嵌套的ifelse:

  1. 它们不直观,常常会导致错误。
  2. 一年后,当你回到他们身边时,他们很难理解。
  3. 它们的表现不如更清晰的替代品。
  4. 以下是一个例子:

    eassociacao <- rep(NA_integer_, nrow(dados) # initialize
    c1 <- !is.na(dados$CENTRAL) & dados$CENTRAL!=" " # condition 1
    c2 <- (!is.na(dados$SISTEMA) & dados$SISTEMA!=" ") # condition 2
    c3 <- (is.na(dados$SISTEMA) & dados$SISTEMA==" ") # condition 3
    
    eassociacao[c1 & c2] <- 1 # Push 1 where c1 and c2 are TRUE
    eassociacao[c1 & c3] <- 2 # Push 2 where c1 and c3 are TRUE
    eassociacao[c1 & !c3] <- 3 # Push 3 where c1 and not c3 are TRUE
    

    您可能需要拆分条件才能获得实际需要的内容。但请相信我,当我说这种方法将节省你的时间,$和frsutration。