Я пытаюсь использовать if else l oop для проверки нескольких столбцов на предмет диапазонов данных, как мне сделать так, чтобы он игнорировал NA в моих данных - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь проверить числа в трех столбцах во фрейме данных, и если они находятся в определенном диапазоне, я хочу определенный вывод. У меня есть эта часть кода, но один из моих тестов хочет знать, если все три отрицательны, тогда я получаю определенный вывод. Моя проблема заключается в том, что некоторые данные в некоторых столбцах являются NA. Я хочу игнорировать АН в моей логике c. Есть ли способ сделать это? Пример моего кода приведен ниже.

if((DataWSGR$RouteType == 7 | DataWSGR$RouteType == 9) & (DataWSGR$SGR > 5 ) & (0 < DataWSGR$`30_Year_SGR` < 5) & (0 < DataWSGR$`20_Year_SGR` < 5) & (0 < DataWSGR$`10_Year_SGR` < 5)) {}

SGR на 10, 20 и 30 лет - это столбцы, которые будут содержать NA.

1 Ответ

0 голосов
/ 25 февраля 2020

После исправления условия диапазона, я думаю, вы можете просто добавить | is.na(var) к последним трем условиям:

if ((DataWSGR$RouteType == 7 |
     DataWSGR$RouteType == 9)) &
    (DataWSGR$SGR > 5) &
    (DataWSGR$`30_Year_SGR` > 0 & DataWSGR$`30_Year_SGR` < 5 | is.na(DataWSGR$`30_Year_SGR`)) &
    (DataWSGR$`20_Year_SGR` > 0 & DataWSGR$`20_Year_SGR` < 5 | is.na(DataWSGR$`20_Year_SGR`)) &
    (DataWSGR$`10_Year_SGR` > 0 & DataWSGR$`10_Year_SGR` < 5 | is.na(DataWSGR$`10_Year_SGR`))) {
}

Если DataWSGR имеет более одной строки, вышеприведенное вызовет ошибку.

Вот воспроизводимый пример для этого в for l oop:

df <- data.frame(
  route_type = c(7, 6, 9),
  sgr = c(6, 3, 6),
  sgr_30 = c(3, 1, NA),
  sgr_20 = c(1, 1, NA),
  sgr_10 = c(2, 1, NA)
)

for (i in 1:nrow(df)) {
  if (
    (df$route_type[i] == 7 | df$route_type[i] == 9) &
    (df$sgr[i] > 5) &
    (df$sgr_30[1] > 0 & df$sgr_30[i] < 5 | is.na(df$sgr_30[i])) &
    (df$sgr_20[1] > 0 & df$sgr_20[i] < 5 | is.na(df$sgr_20[i])) &
    (df$sgr_10[1] > 0 & df$sgr_10[i] < 5 | is.na(df$sgr_10[i]))
  ) {
    print(paste("In range in row", i))
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...