2

我设计了一个实验来观察自吃饭后血清标志物如何随时间变化。我有一个由 72 个观察值和 23o 个变量组成的数据框,称为 BreakfastM。

有 229 个变量是血清标志物,1 个是时间点。观察是不同的样本

我正在寻找血清标志物(即胆固醇)如何随时间点变化的数据趋势。我创建了一个箱线图,可以很好地显示特定血清标志物相对于时间点的趋势

这是我使用的代码

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

有没有一种快速的方法可以通过在 R 中编写循环代码来根据时间点测试数据帧中的所有变量?

4

2 回答 2

4

如果您只是想绘图,使用tidyr(and 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_multipleggplus哪些方面分布在多个页面上。在这里,我使用它为每个“页面”放置一个,您可以根据需要在查看器中查看或保存。

首先,保存基础图(没有刻面):

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")

将生成与上面相同的面板,但每页一个(更改nrowncol可以增加每页显示的方面的数量)。

于 2016-11-01T18:55:26.027 回答
2

您还可以使用循环将许多绘图写入工作目录中的图像文件。让我们制作一个代表 10 个测量变量的 10 列矩阵,每个变量都被 3 个因子水平分割:

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

循环将每个箱线图写入名为var_1.png,var_2.png等的文件中。这将png在您的工作目录中放置 10 秒。

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

这些文件非常小,您可以使用简单的图像查看器快速浏览它们。

在此处输入图像描述

于 2016-11-01T23:53:54.563 回答