Существует ли функция R, которая сравнивает распределение пар столбцов фрейма данных, выкладывая их все в один квадратный лист - PullRequest
0 голосов
/ 21 января 2020

У меня есть фрейм данных, который можно создать следующим образом.

dat <- data.frame(dens = c(rnorm(50), rnorm(50, 10, 5), rnorm(50, 5, 1), rnorm(50, 3,2))
              , group = rep(c("a", "b", "c", "d"), each = 50))

Я пытаюсь сравнить распределение каждой возможной пары групп (a, b), (a, c) , (a, d), (b, c), ... путем построения графика распределения каждой пары друг над другом.

Я хотел бы иметь лист / рамку в матричной форме, которая имеет 16 слотов, чтобы каждый слот представлял распределения, скажем, пары (a, b) и т. Д.

Что я есть ли сейчас график распределения всех 4 групп на одном графике.

ggplot(dat, aes(x = dens, fill = group))+ 
              geom_density(alpha = 0.5)

Есть ли у вас какие-либо идеи, если я смогу создать лист 4 * 4 графиков?

1 Ответ

4 голосов
/ 21 января 2020

Вот подход, который объединяет данные с самими собой после вложения в группы. Таким образом, каждая группа объединяется один раз с каждой другой группой (и самой собой), что позволяет построить каждый набор друг против друга в аспектах.

library(tidyverse)

dat_nested <- dat %>%
  nest(data = c(dens)) %>%    # Edit: better syntax to avoid warning msg
  mutate(all = 1)

dat_nested %>%
  full_join(dat_nested %>% 
              rename(group2 = group),
            by = "all") %>%
  unnest(cols = c(data.x, data.y),   # updated to preferred tidyr 1.0.0 syntax
         names_repair = make.unique) %>%  

  ggplot() +
  geom_density(aes(x = dens, fill = group), alpha = 0.5) +
  geom_density(aes(x = dens.1, fill = group2), alpha = 0.5) +
  facet_grid(group ~ group2)

enter image description here

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