Как я могу сделать несколько графиков плотности из данных внутри вложенного списка

У меня есть вложенный список, содержащий 15 наборов данных (также списков), каждый из которых имеет 3 столбца, но переменное количество строк (тысячи в каждой). Верхняя часть последнего набора данных выглядит в консоли так:

[[15]]
           Object.Number            Internal                      Membrane
1                0                 8.275335e+03                   2575.41042
2                2                 1.225267e+04                   5813.50000
3                3                 9.554725e+03                   2483.51172

Я хотел бы сделать сетку 5x3 графиков плотности, созданную с использованием значений во втором столбце каждого из 15 наборов данных.

Я думал, что смогу сделать это с помощью lapply (myFiles, densityplot(args)), но я не могу найти способ сослаться на столбец в аргументах для densityplot.

Буду признателен за любую информацию о том, как это может быть достигнуто.


person Olly    schedule 07.09.2018    source источник


Ответы (2)


Я бы использовал dplyr::bind_rows с аргументом .id, чтобы связать все data.frame в один data.frame; затем используйте ggplot2 с facet_wrap для построения плотности в сетке 3x5.

Вот пример с использованием выборочных данных mtcars:

# Create sample data
lst <- replicate(15, mtcars, simplify = F)

# Plot
library(tidyverse)
bind_rows(lst, .id = "id") %>%
    mutate(id = factor(id, levels = as.character(1:15))) %>%
    ggplot(aes(mpg)) +
    geom_density() +
    facet_wrap(~ id, nrow = 3, ncol = 5)

введите здесь описание изображения

person Maurits Evers    schedule 07.09.2018

В purrr вы можете использовать сокращенную запись, используя ~ и .x, например:

library(purrr)
map(myFiles, ~ densityplot(.x[[2]]))
person Vlad C.    schedule 07.09.2018
comment
Это интересно. Я вообще не знаю муррр, но обязательно посмотрю. Кажется, это очень эффективный способ сделать это. - person Olly; 12.09.2018
comment
Да, синтаксис с использованием .x и ~ короткий и удобный. Однако это ничем не отличается от определения функции внутри lapply или map. Итак, map(myFiles, ~ densityplot(.x[[2]])) совпадает с map(myFiles, function(x) densityplot(x[[2]])). Последний, в свою очередь, эквивалентен lapply(myFiles, function(x) densityplot(x[[2]])). Вы можете взглянуть на это сравнение между map и lapply stackoverflow.com/questions/45101045/ - person Vlad C.; 12.09.2018