NA в результате pmin в R - PullRequest
1 голос
/ 03 июля 2019

Я использую функцию pmin, чтобы выполнить операцию по строкам над фреймом данных.

Я занимаюсь двумя колонками, которые могут быть обеими.

Моя команда:

ifelse(is.infinite(pmin(A, B, na.rm = T))| pmin(A, B, na.rm = T)>60, 10, 0)

В нем говорится, что если оба значения равны NA или минимум двух больше 60, результат равен 10, в противном случае - ноль.

Обычно это нормально работает с pmin, за исключением случаев, когда A и B равны NA, и в этом случае я получаю NA, а не TRUE. Это не происходит с обычным минимумом - но я не могу использовать этот оператор для фрейма данных, потому что он не векторизован (то есть просто получает ГЛОБАЛЬНЫЙ минимум этого столбца).

Как я могу получить TRUE как выход в этом случае?

1 Ответ

1 голос
/ 03 июля 2019

Мы можем сделать это без ifelse. После получения pmin, replace элементов NA на логическом векторе с FALSE и умножения на 10, так что FALSE возвращает 0, в то время как TRUE становится 10

library(dplyr)
10 * replace_na((pmin(A, B, na.rm = TRUE) > 60), FALSE)

Или после pmin сделать pmax с 0 и na.rm = TRUE. Таким образом, элементы NA заменяются на 0 (при условии, что они имеют только положительные числа), преобразуются в логические (> 60) и умножаются на 10 (как прежде)

10 * (pmax(0, pmin(A, B, na.rm = TRUE), na.rm = TRUE) > 60)

данные

A <- c(NA, 65, 32, NA)
B <- c(NA, NA, 63, 23)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...