R 基于列名创建多个图形

R 基于列名创建多个图形,r,ggplot2,tidyeval,R,Ggplot2,Tidyeval,这是我关于stackoverlow的第一个问题,如果我没有遵循正确的问题协议,请纠正我 我正在尝试为三个时间点(时间1、时间2、时间3)收集的数据创建一些图表,这些时间点等于X1…、X2。。。和X3。。。在列名的开头。图形也由数据框中的$Group列分隔 我在创建图表方面没有问题,我有很多变量(~170),我想比较时间1和时间2,时间2和时间3,等等。所以我试图找到一个快捷方式来运行这种代码,而不是必须单独键入每一个 如上所述,我创建了变量名,如X1。。。X2。。。表示记录变量的时间,即X1BC

这是我关于stackoverlow的第一个问题,如果我没有遵循正确的问题协议,请纠正我

我正在尝试为三个时间点(时间1、时间2、时间3)收集的数据创建一些图表,这些时间点等于X1…、X2。。。和X3。。。在列名的开头。图形也由数据框中的$Group列分隔

我在创建图表方面没有问题,我有很多变量(~170),我想比较时间1和时间2,时间2和时间3,等等。所以我试图找到一个快捷方式来运行这种代码,而不是必须单独键入每一个

如上所述,我创建了变量名,如X1。。。X2。。。表示记录变量的时间,即X1BCSTCAT=时间1;X2BCSTCAT=时间2;X3BCSTCAT=时间3。以下是我的数据的一个小样本:

df <- structure(list(ID = structure(1:6, .Label = c("101","102","103","118","119","120"), class = "factor"), 
                   Group = structure(c(1L,1L,1L,2L,2L,2L), .Label = c("C8","TC"), class = "factor"), 
                   Wave = structure(c(1L, 2L, 3L, 4L, 1L, 2L), .Label = c("A","B","C","D"), class = "factor"), 
                   Yr = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("3","5"), class = c("ordered", "factor")), 
                   Age.Yr. = c(10.936,10.936, 9.311, 10.881, 10.683, 11.244), 
                   Training..hr. = c(10.667,10.333, 10.667, 10.333, 10.333, 10.333), 
                   X1BCSTCAT = c(-0.156,0.637,-1.133,0.637,2.189,1.229), 
                   X1BCSTCR = c(0.484,0.192, -1.309, 0.912, 1.902, 0.484), 
                   X1BCSTPR = c(-1.773,0.859, 0.859, 0.12, -1.111, 0.12), 
                   X2BCSTCAT = c(1.006, -0.379,-1.902, 0.444, 2.074, 1.006), 
                   X2BCSTCR = c(0.405, -0.457,-1.622, 1.368, 1.981, 0.168), 
                   X2BCSTPR = c(-0.511, -0.036,2.189, -0.036, -0.894, 0.949),
                   X3BCSTCAT = c(1.18, -1.399,-1.399, 1.18, 1.18, 1.18), 
                   X3BCSTCR = c(0.967, -1.622, -1.622,0.967, 0.967, 1.255), 
                   X3BCSTPR = c(-1.282, -1.282, 1.539,1.539, 0.792, 0.792)), 
              row.names = c(1L, 2L, 3L, 4L, 5L,8L), class = "data.frame")

df使用
tidyeval
方法的解决方案。我们需要(请记住重新启动R会话)

  • 首先,我们构建一个以列名和组名为输入的函数。注意使用
    rlang::sym
    rlang::quo_name
    &

  • 然后为
    x-
    y-
    值创建两个名称向量,以便我们可以使用
    purrr::map2
    同时循环它们

库(rlang)
图书馆(tidyverse)

df Hi@Tung,谢谢你的回答。我已经通过devtools安装了ggplot,但是当我尝试运行pair_plot的测试函数时,我收到了这个错误消息:
get中的错误(Info[I,1],envir=env):lazy-load-database'/Library/Frameworks/R.framework/R.framework/Versions/3.5/Resources/Library/ggplot2/R/ggplot2.rdb'已损坏另外:警告消息:in-get(Info[I,1],envir=env):R_decompress1中出现内部错误-3
抱歉,已修复此问题。必须删除并重新安装依赖项,然后重新启动R会话。一切都好。非常感谢你的回答!顺便说一句,不要在aes中使用
$
。这就是原因
library(ggplot2)

p <- ggplot(df, aes(x=df$X1BCSTCAT, y=df$X2BCSTCAT, shape = df$Group, color = df$Group)) + 
  geom_point() + geom_smooth(method=lm, aes(fill=df$Group), fullrange = TRUE) + 
  labs(title="BCSTCAT", x="Time 1", y = "Time 2") + 
  scale_color_manual(name = "Group",labels = c("C8","TC"),values = c("blue", "red")) +
  scale_shape_manual(name = "Group",labels = c("C8","TC"),values = c(16, 17)) +
  scale_fill_manual(name = "Group",labels = c("C8", "TC"),values = c("light blue", "pink"))
install.packages("ggplot2", dependencies = TRUE)