首页 > 解决方案 > R函数(循环?)为数据集中的每一列创建一个新图

问题描述

我正在尝试编写代码以使用我的数据集并为数据集的每一列制作一个新图形,而不是每次在代码中都为 y 写出一个新值。

我有一个数据集,其中每一行是一个人,每一列是血液中的测量值(即胰岛素、葡萄糖等)。我有一些额外的列,其中包含我用于我的组的描述性类别(即瘦、肥胖)。我想为这些列测量中的每一个制作一个图表(即,一个图表用于胰岛素,另一个用于葡萄糖,等)。我有 90 个不同的变量要循环。

我已经想出了如何为每一个绘制箱线图,但不知道如何让代码“循环”?这样我就不必为每个变量重新编写代码。

以 mtcars 数据集为例,我让它制作了一个 y 为 disp 的图,然后是另一个 y = hp 和 y = drat 的图。

data("mtcars")

#boxplot with individual points - first y variable
ggplot(data = mtcars, aes(x = cyl, y = disp)) +
  geom_boxplot()+
  geom_point()

#boxplot with individual points - 2nd y variable
ggplot(data = mtcars, aes(x = cyl, y = hp)) +
  geom_boxplot()+
  geom_point()

#boxplot with individual points - 3rd y variable
ggplot(data = mtcars, aes(x = cyl, y = drat)) +
  geom_boxplot()+
  geom_point()

如何进行设置,以便我的代码自动循环遍历数据集中的所有变量(我有 90 个)?

标签: rloopsggplot2multiple-columns

解决方案


这是一个基本的解决方案,您将在其中填充vector_of_yvals90 个变量以进行循环:

library(tidyverse)

plot_func <- function(yval){
  p <- ggplot(data = mtcars, aes(x = cyl, y = yval)) +
    geom_boxplot()+
    geom_point()
  p
}


vector_of_yvals <- c("disp", "hp", "drat")

list_of_plots <- map(vector_of_yvals, plot_func)

您可以通过执行以下操作填充vector_of_yvals数据框中的所有变量:

vector_of_yvals <- colnames(mtcars)

这会给你一个向量:

[1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

如果你不想包含cyl在你的向量中,你可以像这样过滤掉它:

vector_of_yvals <- vector_of_yvals %>% .[. != "cyl"]

推荐阅读