Потребовалось некоторое время, чтобы понять, как это сделать, и все же я не уверен, что это лучший способ.
Данные:
dat = structure(list(ID = 1:6,
test1 = c("A", "B", "C", "A", "B", "B"),
test2 = c("B", "A", "C", "A", "B", "A"),
test3 = c("A", "C", "C", "B", "B", "C")
),
.Names = c("ID", "test1", "test2", "test3"),
class = "data.frame", row.names = c(NA, -6L)
)
Библиотеки
library(tidyverse)
library(ggthemes)
library(gridExtra)
Создание всех комбинаций факторов (а также тестов), взятых по 2 за раз
fcombs <- expand.grid(LETTERS[1:3], LETTERS[1:3], stringsAsFactors = F)
tcombs <- as.data.frame(combn(colnames(dat[,-1]), 2), stringsAsFactors = F)
lapply
с помощью комбинаций тестов,
full_join
, длина счета каждой группы, исключая
NA
s
dtl <- lapply(tcombs, function(i){
select(dat, ID, i) %>%
full_join(x = fcombs, by = c("Var1" = i[1], Var2 = i[2])) %>%
group_by(Var1, Var2) %>%
mutate(N = sum(!is.na(ID)), ID = NULL) %>%
ungroup()
}
)
Создать список графиков
pl <- lapply(seq_along(tcombs), function(i){
gtitle = paste(tcombs[[i]], collapse = " ~ ")
dtl[[i]] %>%
ggplot(aes(x = Var1, y = Var2, fill = N)) +
geom_tile() +
theme_tufte() +
theme(axis.title = element_blank()) +
ggtitle(gtitle)
}
)
Создать список таблиц (
tableGrob
объекты)
tbl <- lapply(tcombs, function(i) tableGrob(select(dat, ID, i),
theme = ttheme_minimal()))
Поместить все в результирующий список и построить график
resl <- c(pl, tbl)[c(1, 4, 2, 5, 3, 6)]
grid.arrange(grobs = resl, ncol = 2, nrow = 3)
