#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. очень похоже и так же полезно