У меня есть вектор, который я пытаюсь заменить значениями в использовании if/else. Он заменяет все значения, кроме NA. Может кто-нибудь сказать мне, почему?NA в списке считается числовым. Как преобразовать в объект NA?
Мое подозрение в том, что NA обрабатываются как числа (на основе проверки класса значения списка NA, который возвращает числовую), но если они обрабатываются таким образом, как я могу получить R, чтобы увидеть их как объекты NA, так выполняется мое заявление if?
> V(g)$label
[1] 13 9 17 34 8 15 0 10 19 21 9 12 23 12 19 25 12 23 20 13 35 1 3 0 0 34 42 10 26 24 17 21 14 0 0 5 8 25 1 38 21 7 28 1 7 5 2 0 33 9 0 3 24 8 28 31 1 4 12 42 18 14 22 44 7 20 17 25 16 20 15
[72] 8 13 45 8 32 13 25 15 33 15 13 52 37 2 4 27 41 12 33 26 4 0 7 37 43 24 23 22 9 3 7 8 13 20 0 0 0 9 10 1 2 18 16 0 0 8 11 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> class(V(g)$label[130])
[1] "numeric"
> V(g)$label[130]
[1] NA
########converts values
V(g)$label <- ifelse(as.numeric(V(g)$label) < 10, 1,
ifelse(as.numeric(V(g)$label) >= 30, 3,
ifelse(is.na(V(g)$label),999,2)))
> V(g)$label
[1] 2 1 2 3 1 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 3 1 1 1 1 3 3 2 2 2 2 2 2 1 1 1 1 2 1 3 2 1 2 1 1 1 1 1 3 1 1 1 2 1 2 3 1 1 2 3 2 2 2 3 1 2 2 2 2 2 2
[72] 1 2 3 1 3 2 2 2 3 2 2 3 3 1 1 2 3 2 3 2 1 1 1 3 3 2 2 2 1 1 1 1 2 2 1 1 1 1 2 1 1 2 2 1 1 1 2 1 1 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Не могли бы вы добавить результат 'dput (V (g) $ label)', а также добавить желаемый результат. Я подозреваю, что есть лучший способ достичь желаемого результата. Значения NA классифицируются как числовые, поскольку они начинаются с числового вектора. На самом деле они не рассматриваются как числа. –
Вы также можете сначала изменить значения NA, используя знак 'is.na (V (g) $) <- 999', и все будет, вероятно, более плавным. –
Вместо использования нескольких' ifelse' вы можете рассмотреть 'cut' с соответствующими 'breaks', а затем заменить NA на последнем шаге. – Henrik