Ошибка: пропущенное значение, где требуется ИСТИНА / ЛОЖЬ, если в R не установлено значение NA - PullRequest
0 голосов
/ 24 апреля 2018

Я проверял здесь, чтобы найти подобную проблему, и я не мог видеть, хотя я видел то же самое сообщение об ошибке.

Допустим, у меня есть данные:

temp = data.frame(ID = c(1:5),
Pl = c("11","12",NA,"14",NA), Pl2 = c("11","11","12","14","14"))
ID   Pl Pl2
 1   11  11
 2   12  11
 3 <NA>  12
 4   14  14
 5 <NA>  14`

И я хотел создать четвертый столбец с условиями:

  • Если Pl1 == Pl2, то желаемый результат будет 0 для четвертого столбца
  • Если Pl1 == NA, то желаемый результат будет NA для четвертого столбца
  • для условий, которые должны быть логически, где Pl1! = Pl2, тогда желаемый результат - 1 для четвертого столбца.

В конце концов, я пришел с этим кодом, который я получил сообщение об ошибке:

for (i in nrow(temp)){
  if (temp[i,2] == temp[i,3]) { 
    temp[i,4] = "0"
  } else if (is.na(temp[i,2])) {
    temp[i,4] = NA
  } else (temp[i,4] = "1")
}

Error in if (temp[i, 2] == temp[i, 3]) { : 
  missing value where TRUE/FALSE needed

Так что я не вижу никакой синтаксической / операторской ошибки, но может быть какая-то логическая вещь?

1 Ответ

0 голосов
/ 24 апреля 2018

Мы можем просто сделать сравнение и привести его к двоичному виду

with(temp, as.integer(Pl != Pl2))

или

with(temp, as.integer(!(NA^(is.na(Pl))* (Pl == Pl2)))) 

В коде OP'а цикл проходит по nrowт.е. одно число вместо этого должно быть либо 1:nrow(temp) или более правильным seq_len(nrow(temp))

for (i in 1:nrow(temp)){
  if (temp[i,2] == temp[i,3] & !is.na(temp[i,2])) { 
    temp[i,4] <- "0"
  }else if (is.na(temp[i,2])){
   temp[i,4] <- NA
   } else {
     temp[i,4] <- "1"
   }

}

temp[,4]
#[1] "0" "1" NA  "0" NA 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...