Создание цикла в r для нескольких участков

Я разработал эксперимент, чтобы увидеть, как сывороточные маркеры меняются со временем после еды. У меня есть фрейм данных, состоящий из 72 наблюдений и 23о переменных, это называется BreakfastM.

Есть 229 переменных, которые являются маркерами сыворотки и 1, которая является моментом времени. Наблюдения разных образцов

Я ищу тенденции в данных о том, как сывороточные маркеры (то есть холестрол) меняются с течением времени. Я создал коробочную диаграмму, которая хорошо показывает тенденции в конкретном сывороточном маркере по отношению ко времени

Это код, который я использовал

boxplot((BreakfastM$Variable~BreakfastM$Timepoint))

Есть ли быстрый способ проверить все переменные в кадре данных по времени, написав код цикла в R?

2 ответа

Если вы просто ищете сюжет, переходите в длинную форму с tidyr (а также dplyr), а затем заговор с ggplot2 вероятно, лучшая отправная точка.

Если у вас есть только небольшое количество переменных, вы можете просто использовать facet_wrap разделить боксы по мере. Поскольку вы не предоставили воспроизводимых данных, я использую mtcars данные, подставляя "шестеренки" для вашей временной точки, и ограничиваясь только числовыми значениями для сравнения. select выбирает столбцы, которые я хочу использовать, затем gather преобразует их в длинный формат, прежде чем перейти к ggplot

mtcars %>%
  select(gear, mpg, disp:qsec) %>%
  gather(Measure, Value, -gear) %>%
  ggplot(aes(x = factor(gear)
             , y = Value)) +
  geom_boxplot() +
  facet_wrap(~Measure
             , scales = "free_y")

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

Теперь, с 229 переменными, это не будет читаемым сюжетом. Вместо этого вы можете посмотреть на facet_multiple от ggplus который распространяется гранями на нескольких страницах. Здесь я использую его, чтобы разместить по одной на "страницу", которую вы можете просмотреть в программе просмотра или сохранить в зависимости от ваших потребностей.

Сначала сохраните базовый график (без фасетирования):

basePlot <-
  mtcars %>%
  select(gear, mpg, disp:qsec) %>%
  gather(Measure, Value, -gear) %>%
  ggplot(aes(x = factor(gear)
             , y = Value)) +
  geom_boxplot()

Затем используйте его в качестве аргумента facet_multiple:

facet_multiple(basePlot, "Measure"
               , nrow = 1
               , ncol = 1
               , scales = "free_y")

Создает те же панели, что и выше, но по одной на страницу nrow а также ncol может увеличить количество граней, показанных на странице).

Вы также можете использовать цикл для записи множества графиков в файлы изображений в вашем рабочем каталоге. Давайте создадим матрицу из 10 столбцов, представляющую 10 измеренных переменных, каждая из которых разделена на 3 факторных уровня:

data <- matrix(rnorm(150), nrow=15)
grps <- factor(c(rep("group1", 5), rep("group2", 5), rep("group3", 5)))

Цикл записывает каждый boxplot в файлы, называемые var_1.png, var_2.pngи т.д. Это будет ставить 10 pngв вашем рабочем каталоге.

for (i in 1:ncol(data)) {
  png(file = paste("var_", i, ".png", sep=""))
  boxplot(data[, i] ~ grps)
  dev.off()
}

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

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

Другие вопросы по тегам