xtabs считает с NA и na.action = na.pass в R - PullRequest
1 голос
/ 21 мая 2019

У меня есть следующее 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?

1 Ответ

1 голос
/ 21 мая 2019

Изменить na.action=na.pass на na.action=NULL.

xtabs(formula = cbind(B, C) ~ A,
      data = x,
      addNA = TRUE,
      na.action = NULL)

A      B C
  Y    1 2
  Z    0 0
  <NA> 1 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...