Подсчитать количество элементов, соответствующих критериям, в столбцах со значениями NA

У меня есть матрица со значениями «A», «B» и NA, и я хотел бы подсчитать количество значений «A», «B» или NA в каждом столбце.

sum(mydata[ , i] == "A")

и

sum(mydata[ , i] == "B")

отлично работал для столбцов без NA. Для столбцов, содержащих NA, я могу подсчитать количество NA с sum(is.na(mydata[ , i]). В этих столбцах sum(mydata[ , i] == "A") возвращает NA вместо числа.

Как я могу подсчитать количество значений «A» в столбцах, которые содержат значения NA?

Спасибо за вашу помощь!

Пример:

> mydata
    V1  V2  V3  V4 
V2 "A" "A" "A" "A"
V3 "A" "A" "A" "A"
V4 "B" "B" NA  NA 
V5 "A" "A" "A" "A"
V6 "B" "A" "A" "A"
V7 "B" "A" "A" "A"
V8 "A" "A" "A" "A"

sum(mydata[ , 2] == "A")
# [1] 6

sum(mydata[ , 3] == "A")
# [1] NA

sum(is.na(mydata[ , 3]))
# [1] 1

r sum na
person sztup    schedule 22.03.2012    source источник


Ответы (6)


Функция sum (как и многие другие математические функции в R) принимает аргумент na.rm. Если вы установите na.rm=TRUE, R удалит все значения NA перед выполнением вычисления.

Пытаться:

sum(mydata[,3]=="A", na.rm=TRUE)
person Andrie    schedule 22.03.2012

Не уверен, что это то, что вам нужно. RnewB тоже, так что проверьте, работает ли это. Разница между количеством строк и вашим количеством строк покажет вам количество элементов NA.

colSums(!is.na(mydata))
person InMktgWeTrust    schedule 11.01.2014

Чтобы расширить ответ от @Andrie,

mydata <- matrix(c(rep("A", 8), rep("B", 2), rep(NA, 2), rep("A", 4),
  rep(c("B", "A", "A", "A"), 2), rep("A", 4)), ncol = 4, byrow = TRUE)

myFun <- function(x) {
  data.frame(n.A = sum(x == "A", na.rm = TRUE), n.B = sum(x == "B",
    na.rm = TRUE), n.NA = sum(is.na(x)))
}

apply(mydata, 2, myFun)
person BenBarnes    schedule 22.03.2012

Другая возможность состоит в том, чтобы преобразовать столбец в фактор, а затем использовать сводку функции. Пример:

vec‹-c ("А", "Б", "А", Н/Д)

резюме (as.factor (vec))

person user4353689    schedule 26.01.2015

Быстрый способ сделать это — сделать сводную статистику для переменной:

Сводка(mydata$my_variable) таблицы(mydata$my_variable)

Это даст вам количество пропущенных переменных.

Надеюсь это поможет

person Frank Odhiambo    schedule 11.03.2015

Вы можете использовать table для одновременного подсчета всех ваших значений.

person Sophia    schedule 22.03.2012