在R中,如何使用for循环创建一系列图形

n8sty

我有一个看起来像这样的宽表:

ID  Test_11 LVL11  Score_X_11 Score_Y_11  Test_12 LV12  Score_X_12  Score_Y_12
1   A       I      100        NA          NA      NA    100         100
2   A       II     90         100         B       II    90          85 
3   NA      NA     NA         NA          B       II    90          NA
4   A       III    100        80          A       III   75          75
5   B       I      NA         90          NA      NA    60          50
6   B       I      70         100         NA      NA    NA          NA
7   B       II     85         NA          A       I     60          60

用来排序的表格看起来像这样

Test_11   A
Test_11   B
Test_12   A
Test_12   B

第二张表告诉我们,对于Test_11,有两个版本,A和B(与Test_12相同)。

我正在尝试创建一系列箱形图,以图形化显示Test_11和Test_12的每种组合及其各自版本(A,B)的分布。因此,对于Test_11 == A,创建的箱线图将具有三个组(I,II,III),然后是来自子集的结果图形信息,其中Test_11 == A,然后对于Test_11 == B,Test_12 == A ,并且Test_12 == B。在此示例中,总共应该创建4个图。

我在R中拥有的是:

z <- subset(df, df$Test_11=="A")
plot(z$LVL11, z$Score_X_11, varwidth = TRUE, notch = TRUE, xlab = 'LVL', 
     ylab = 'score')

我想要(但无法弄清楚该怎么做)的方法是编写一个for循环,该循环为我做子集,以便我可以为包含几十种这些组合的实际数据集自动执行此操作。

感谢您的帮助和指导。

胡安

“直截了当的方式”

也许您应该在循环之前将所有逻辑向量保存在data.frame或矩阵中:

selections <- matrix(nrow = nrow(df), ncol = 4)
selections[,1] <- df$Test_11 == "A"
selections[,2] <- df$Test_11 == "B"
selections[,3] <- df$Test_12 == "A"
selections[,4] <- df$Test_12 == "B"
# etc...
par(mfcol = c(2, 2)) # here you should customize at will...
for (i in 1:4) {
  z <- subset(df, selections[,i])
  plot(z$LVL11, z$Score_X_11, varwidth = TRUE, 
       notch = TRUE, xlab = 'LVL', 
       ylab = 'score')
}

您可以更改代码,因此可以使用而不是z$Score_X_11使用z[,string]的值string应使用paste(或其他字符串操作函数)构造例如:

v <- c("X", "Y")
n <- c("11", "12")
for (i in 1:2) {
  for (j in 1:2) {
    string <- paste("Score", v[i], n[i], sep = "_")
    print(string)
  }
}

这些z$LVLXX将使用类似的推论,因此您应该能够找到一种适合该值的方法。

替代方法,使用ggplot2和reshape2

我对使用网格图形的经验不是很丰富(就像在其他anwser中一样),但是我对ggplot2有所了解,所以我决定接受挑战并尝试一下。它不是很好,但是至少可以起作用:

# df <- read.table("data.txt", header = TRUE, na.string = "NA")
require(reshape2)
require(ggplot2)

# Melt your data.frame, using the scores as the "values":
mdf <- melt(df[,-1], id = c("LVL11", "LV12", "Test_11", "Test_12"))

# loop through level types:
for (lvl in c("LVL11", "LV12")) {
  # looping through values of test11
  for (test11 in c("A", "B")) {
    # Note the use of subset before ggplot
    p <- ggplot(subset(mdf, Test_11 == test11), aes_string(x=lvl, y="value"))
    # I added the geom_jitter as in the example given there were only a few points
    g <- p + geom_boxplot(aes(fill = variable)) + geom_jitter(aes(shape = variable))
    print(g) # it is necessary to print p explicitly like this in order to use ggplot in a loop
    # Finally, save each plot with a relevant name:
    savePlot(paste0(lvl, "-t11", test11, ".png")) 
    # (note that savePlot has some problems with RStudio iirc)

  }
  # Same as before, but with test_12
  for (test12 in c("A", "B")) {
    p <- ggplot(subset(mdf, Test_12 == test12), aes_string(x=lvl, y="value"))
    g <- p + geom_boxplot(aes(fill = variable)) + geom_jitter(aes(shape = variable))
    print(g) 
    savePlot(paste0(lvl, "-t12", test12, ".png"))
  }
}

如果有人知道如何使用网格图形,或者facet_grid在这种情况下,那么我可以将所有grahpics放在一张图像中,我很想听听如何使用。

干杯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中循环执行一系列步骤

来自分类Dev

如何在ansible中循环一系列任务

来自分类Dev

如何使用for循环构建一系列承诺的响应?

来自分类Dev

在R中创建一系列连接矩阵

来自分类Dev

如何从一系列样本中创建Observable?

来自分类Dev

如何从一系列事件中创建日历?

来自分类Dev

如何从R中的一系列直径中创建3或4种直径类别?

来自分类Dev

如何在R中使用map遍历对象以创建一系列gt表

来自分类Dev

如何使用if命令为R上的一系列值创建函数

来自分类Dev

如何使用 COMPUTE 在 SPSS 中创建和计算一系列值?

来自分类Dev

如何从标准输入中绘制出一系列数字的图形图?

来自分类Dev

通过for循环和exec()创建一系列映射

来自分类Dev

如何在for循环中创建和执行一系列PHP变量函数?

来自分类Dev

如何使用循环将一系列字符映射到上下颠倒的金字塔中?

来自分类Dev

Ansible如何循环执行一系列任务?

来自分类Dev

如何循环显示一系列Google Spreadsheets

来自分类Dev

如何从for循环matlab存储一系列向量

来自分类Dev

如何循环遍历一系列音频对象

来自分类Dev

如何打破循环中的一系列异步操作?

来自分类Dev

使用循环提取一系列整数

来自分类Dev

如何创建一个简单的脚本(在Linux中)执行一系列命令?

来自分类Dev

如何在Python中循环执行一系列功能?

来自分类Dev

如何创建一系列CGPoint(SWIFT)

来自分类Dev

如何为一系列命令创建别名?

来自分类Dev

在angularjs中创建一系列显示/隐藏屏幕

来自分类Dev

在PostgreSQL 9.3中创建一系列日期

来自分类Dev

在Matlab中根据一系列图像创建视频

来自分类Dev

在 Python 中从一系列数字创建列表

来自分类Dev

尝试使用 for 循环从类中调用一系列实例

Related 相关文章

  1. 1

    在R中循环执行一系列步骤

  2. 2

    如何在ansible中循环一系列任务

  3. 3

    如何使用for循环构建一系列承诺的响应?

  4. 4

    在R中创建一系列连接矩阵

  5. 5

    如何从一系列样本中创建Observable?

  6. 6

    如何从一系列事件中创建日历?

  7. 7

    如何从R中的一系列直径中创建3或4种直径类别?

  8. 8

    如何在R中使用map遍历对象以创建一系列gt表

  9. 9

    如何使用if命令为R上的一系列值创建函数

  10. 10

    如何使用 COMPUTE 在 SPSS 中创建和计算一系列值?

  11. 11

    如何从标准输入中绘制出一系列数字的图形图?

  12. 12

    通过for循环和exec()创建一系列映射

  13. 13

    如何在for循环中创建和执行一系列PHP变量函数?

  14. 14

    如何使用循环将一系列字符映射到上下颠倒的金字塔中?

  15. 15

    Ansible如何循环执行一系列任务?

  16. 16

    如何循环显示一系列Google Spreadsheets

  17. 17

    如何从for循环matlab存储一系列向量

  18. 18

    如何循环遍历一系列音频对象

  19. 19

    如何打破循环中的一系列异步操作?

  20. 20

    使用循环提取一系列整数

  21. 21

    如何创建一个简单的脚本(在Linux中)执行一系列命令?

  22. 22

    如何在Python中循环执行一系列功能?

  23. 23

    如何创建一系列CGPoint(SWIFT)

  24. 24

    如何为一系列命令创建别名?

  25. 25

    在angularjs中创建一系列显示/隐藏屏幕

  26. 26

    在PostgreSQL 9.3中创建一系列日期

  27. 27

    在Matlab中根据一系列图像创建视频

  28. 28

    在 Python 中从一系列数字创建列表

  29. 29

    尝试使用 for 循环从类中调用一系列实例

热门标签

归档