У меня есть следующее data.frame
:
x <- data.frame(A = c("Y", "Y", "Z", NA),
B = c(NA, TRUE, FALSE, TRUE),
C = c(TRUE, TRUE, NA, FALSE))
Мне нужно вычислить следующую таблицу:
A B C
Y 1 2
Z 0 0
<NA> 1 0
Однако я не могу достичь этого результата с xtabs
,даже с na.action = na.pass
:
xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = na.pass)
A B C
Y 2
Z 0
<NA> 1 0
From ?xtabs
:
na.action
функция, которая указывает, что должно происходить, когда данные содержат NA.Если не указано, и addNA имеет значение true, устанавливается значение na.pass.Когда это значение равно na.pass, а формула имеет левую часть (с счетами), сумма (*, na.rm = TRUE) используется вместо суммы (*) для счетчиков.
addNA
логическое указание, должны ли NA получить отдельный уровень и быть посчитаны, используя addNA (*, ifany = TRUE) и устанавливая значение по умолчанию для na.action.
В качестве обходного пути я могу заменить NA
by FALSE
:
x[is.na(x$B), "B"] <- FALSE
x[is.na(x$C), "C"] <- FALSE
xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE)
A B C
Y 1 2
Z 0 0
<NA> 1 0
Или я могу использовать агрегат, но addNA = TRUE
эквивалента нет:
aggregate(formula = cbind(B, C) ~ A,
data = x,
FUN = sum,
na.rm = TRUE,
na.action = na.pass)
A B C
1 Y 1 2
2 Z 0 0
Какой самый простой способ получить эту таблицу вбаза R?Я работаю в ограничительной среде, где у меня есть доступ только к базе R.
Можно ли получить эту таблицу с xtabs
без замены NA
на FALSE
?