R函数(循环?)为数据集中的每一列生成一个新的图形
我试图编写代码来使用我的数据集,并为数据集的每一列创建一个新的图形,而不是每次都要在代码中为y写出一个新值 我有一个数据集,其中每一行是一个人,每一列是血液中的测量值(即胰岛素、葡萄糖等)。我有几个额外的列,其中有描述性的类别,我正在为我的组(即瘦、肥胖)使用。我想为每个列的测量值制作一个图表(即,一个是胰岛素的图表,另一个是葡萄糖的图表,等等)。我有90个不同的变量要循环 我已经知道了如何为每一个变量创建一个箱线图,但是却不知道如何让代码“循环”?这样我就不必为每个变量重新编写代码了 以mtcars数据集为例,我让它生成一个图,其中y是disp,然后是另一个图,其中y=hp,然后y=drat。R函数(循环?)为数据集中的每一列生成一个新的图形,r,loops,ggplot2,multiple-columns,R,Loops,Ggplot2,Multiple Columns,我试图编写代码来使用我的数据集,并为数据集的每一列创建一个新的图形,而不是每次都要在代码中为y写出一个新值 我有一个数据集,其中每一行是一个人,每一列是血液中的测量值(即胰岛素、葡萄糖等)。我有几个额外的列,其中有描述性的类别,我正在为我的组(即瘦、肥胖)使用。我想为每个列的测量值制作一个图表(即,一个是胰岛素的图表,另一个是葡萄糖的图表,等等)。我有90个不同的变量要循环 我已经知道了如何为每一个变量创建一个箱线图,但是却不知道如何让代码“循环”?这样我就不必为每个变量重新编写代码了 以mtc
我如何设置它,使我的代码自动循环使用数据集中的所有变量(我有90个变量)?这里有一个基本解决方案,您可以使用90个变量来填充
矢量变量来循环:
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)
这将为您提供一个向量:
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
如果不想在向量中包含cyl
,可以按如下方式将其过滤掉:
vector_of_yvals <- vector_of_yvals %>% .[. != "cyl"]
vector\u of_yvals%..!=“cyl”]
这里有一个稍微不同的版本,使用for循环和使用!!sym()
来计算变量文本字符串:
library(rlang)
variables<-c("disp", "hp", "drat")
for (var in variables) {
# print(var)
p<-ggplot(data = mtcars, aes(x = cyl, y = !!sym(var), group=cyl)) +
geom_boxplot()+
geom_point()
print(p)
}
库(rlang)
变量我必须输入每个y值吗,或者有没有一种方法可以不用输入每个y值就可以完成这项工作?例如,向量你可以用这个:vector\u of yvals你最后要对90个图做什么?问这个问题,因为你可能想看看facet\u wrap
或者(甚至更好)ggforce::facet\u wrap\u paginate
在您将数据从宽改为长后。好的-我会看一看。在这一点上,我只想对数据进行快速可视化。很高兴尝试其中任何一种,如果它可以做同样的事情,但将它们放在一个更好的格式中。您能指导我如何使用该函数吗?这很好!我很高兴我现在尝试使用ggforce::facet\u wrap\u paginate的建议,这样我的图表就不是每页1个了。我认为需要在print命令之前添加代码,但不知道第一个“facet”应该是“facet\u wrap\u paginate”((facets,nrow=9,ncol=10,scales=“free”,shrink=TRUE,labeller=“label\u value“,as.table=TRUE,switch=NULL,drop=TRUE,dir=“h”,strip.position=“top”,page=1)
要使用ggforce::facet\u wrap\u paginate
您必须将数据从宽格式重塑为长格式。tidyr::pivot\u longer()
是执行该转换的函数。
vector_of_yvals <- vector_of_yvals %>% .[. != "cyl"]
library(rlang)
variables<-c("disp", "hp", "drat")
for (var in variables) {
# print(var)
p<-ggplot(data = mtcars, aes(x = cyl, y = !!sym(var), group=cyl)) +
geom_boxplot()+
geom_point()
print(p)
}