Подсчитать количество элементов, соответствующих критериям в столбцах со значениями NA - PullRequest
4 голосов
/ 22 марта 2012

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

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

и

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

отлично работали для столбцов без NA.Для столбцов, которые содержат NA, я могу посчитать число NA s с 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

Ответы [ 6 ]

7 голосов
/ 22 марта 2012

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

Попробуйте:

sum(mydata[,3]=="A", na.rm=TRUE)
3 голосов
/ 11 января 2014

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

colSums(!is.na(mydata))
0 голосов
/ 11 марта 2015

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

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

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

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

0 голосов
/ 26 января 2015

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

VEC <-c ( "А", "В", "А", Н. А.) </p>

Резюме (as.factor (VEC))

0 голосов
/ 22 марта 2012

Чтобы расширить ответ от @ 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)
0 голосов
/ 22 марта 2012

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

...