Присвоить второму столбцу значение 0, где в первом столбце указано NA для той же строки

#r #loops #substitution

#r #циклы #замена

Вопрос:

У меня есть набор данных с 16 столбцами, разбитыми на пары. Один с названием вида, а второй с процентным покрытием (таким образом, 8 столбцов с названиями видов и 8 столбцов с целыми числами для процентного покрытия). Я хочу, чтобы строки с NA для названия вида имели 0 в соседнем столбце процент покрытия для той же строки. Как я могу написать цикл, который выполняет это?

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

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

 for(i in 1:nrow(x)){
  if (x$species_1[i]==NA) {x$cover_1[i] <- 0}
  else {NULL}
}
  

но это приводит к этому

     Error in if (x$species_1[i] == NA) { : missing value where TRUE/FALSE needed
  

которое я прочитал, относится к тому факту, что в vector…so вы видите мою головоломку…

В конце концов, я хочу, чтобы все NAS для видов имели соответствующий 0 в соседнем столбце для процентного покрытия

Комментарии:

1. В общем, обратите внимание, что x == NA вернет NA для любого разумного значения x . Поскольку NA может интерпретироваться как «неизвестное значение», мы не знаем, принимает ли x значение неизвестного значения.

Ответ №1:

Попробуйте это вместо:

 x[is.na(x$species_1), "cover_1"] <- 0
  

Комментарии:

1. ах да, в точку

Ответ №2:

Изменить

 if (x$species_1[i]==NA)
  

Для

 if ( is.na(x$species_1[i]) )
  

Комментарии:

1. очень похоже и так же полезно