Рассмотрим следующий фрейм данных:
set.seed(123)
data <- data.frame(col1 = factor(rep(c("A", "B", "C"), 4)),
col2 = factor(c(rep(c("A", "B", "C"), 3), c("A", "A", "A"))),
val1 = 1:12,
val2 = rnorm(12, 10, 15))
Таблица непредвиденных расходов выглядит следующим образом:
cont_tab <- table(data$col1, data$col2, dnn = c("col1", "col2"))
cont_tab
col2
col1 A B C
A 4 0 0
B 1 3 0
C 1 0 3
Как видите, некоторые пары не встречались: (A, B), (A, C), (B, C), (C, B). Конечная цель моего анализа - перечислить все пары (в данном случае 9) и показать статистику для каждой из них. При использовании функции dplyr::group_by()
я столкнулся с ограничением. А именно, dplyr::group_by()
рассматривает только существующие пары (пары, которые встречались хотя бы один раз):
data %>%
group_by(col1, col2) %>%
summarize(stat = sum(val2) - sum(val1))
# A tibble: 5 x 3
# Groups: col1 [?]
col1 col2 stat
<fct> <fct> <dbl>
1 A A 58.1
2 B A -16.4
3 B B 17.0
4 C A -12.9
5 C C -41.9
Вывод, который я имею в виду, состоит из 9 строк (4 из которых имеют stat
, равный 0). Это выполнимо в dplyr
?
РЕДАКТИРОВАТЬ: Извините за слишком расплывчатые в начале. Реальная проблема более сложна, чем подсчет количества встреч конкретной пары. Я добавил новые данные, чтобы реальная проблема стала более заметной.