графики geom_density с вложенными векторами - PullRequest
0 голосов
/ 04 октября 2019

У меня есть фрейм данных с вложенным вектором в одном столбце. Любые идеи, как ggplot geom_density, используя значения из вложенного вектора?

Если я использую pivot_longer весь фрейм данных, я получу 25 миллионов строк, поэтому я предпочел бы избежать этого, если это возможно.

library(ggplot2)
df = data.frame(a = rep(letters[1:5],length.out = 100), b = sample(LETTERS, 100, replace = T))
df[["c"]] = purrr::map(1:100, function(x) rnorm(100))
# works but too heavy for the actual implementation
ggplot(tidyr::unnest(df, c), aes(c, group = a)) + geom_density() + facet_wrap(vars(b))
# doesn't work
ggplot(df, aes(c, group = a)) + geom_density() + facet_wrap(vars(b))

1 Ответ

0 голосов
/ 08 октября 2019

Различное решение: подготовьте каждый график по отдельности и затем перегруппируйте его, используя пакет gridExtra.

library(ggplot2)
df = data.frame(a = rep(letters[1:5],length.out = 100), b = sample(LETTERS, 100, replace = T))
df[["c"]] = purrr::map(1:100, function(x) rnorm(100))

lst_plot <- lapply(sort(unique(df$b)), function(x){
  data <- df[df$b == x,
  data <- purrr::map_dfr(seq(length(data$a)), ~ data.frame(a = data$a[.x], c = data$c[.x][[1]]))
  gg <- ggplot(data) +
    geom_density(aes(c, group = a)) +
    ylab(NULL)
  return(gg)
})

gridExtra::grid.arrange(grobs = lst_plot, ncol = 6, left = "density")

Если честно, я не уверен, насколько хорошо это работает с вашим массивом данных ...

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