为每个唯一的受试者 ID 生成单独的图,并使用受试者 ID 号将它们保存在工作目录中

Generating separate plots for each unique subject ID and save them in the working directory with the subject ID number

我有很多主题的大量数据。数据有以下列:

    ID  TIME   CONC
7030104 2.0    0.536
7030104 2.5    1.320
7030104 3.0    1.460
7030104 4.0    5.070
7030104 5.0    17.300
7030104 6.0    38.600
70304   8.0    0.589
70304   10.0   35.400
70304   12.0   29.400
70304   24.0   10.900
70304   36.0   3.260
70304   48.0   1.290

我想为每个受试者 ID 绘制一个单独的图(CONC 与 TIME),并自动将其与受试者的 ID 号一起保存到工作目录。

我正在使用简单绘图,但我需要帮助了解如何将它应用于所有主题 ID 并将绘图自动保存到我的工作目录中。

setwd("..")
plotobj <- NULL
plotobj <- plot(sub$TIME,sub$CONC,type="b")

我正在使用 RStudio

感谢您的帮助!

首先尝试获取 ID 列表

id_arr = unique(sub$ID)

之后,为每个可能的 ID 保存绘图

for(i in id_arr) {
    sub_id = subset(sub, ID == i)
    jpeg(paste(i, ".jpg", sep=""))
    plot(sub_id$TIME, sub_id$CONC, type="b")
    dev.off()
}

您可以将其保存在单个 "pdf" 文件中,每图一页。该图的 "title" 标识子集 "ID"。在这里,我在按 "ID" 拆分 (split) 数据集后使用 lapply。指定 plot 参数并将其包装在 invisible 中,这样 NULL 循环就不会在 R 控制台上打印出来。

par(mfrow=c(1,1))
pdf('Amer.pdf')
lst <- split(df, df$ID)
invisible(lapply(lst, function(sub) with(sub, 
    plot(TIME, CONC, type='b', main= paste('Plot of', ID[1])) )))
dev.off()

或者如果你需要"separate",.jpg地块,lapply仍然可以使用

 invisible(lapply(lst, function(sub) {
      jpeg(paste0(sub$ID[1],'.jpg'))
       with(sub, plot(TIME, CONC, type='b', main=paste('Plot of', ID[1])))
      dev.off()
      }))

数据

df <- structure(list(ID = c(7030104L, 7030104L, 7030104L, 7030104L, 
7030104L, 7030104L, 70304L, 70304L, 70304L, 70304L, 70304L, 70304L
), TIME = c(2, 2.5, 3, 4, 5, 6, 8, 10, 12, 24, 36, 48), CONC = c(0.536, 
1.32, 1.46, 5.07, 17.3, 38.6, 0.589, 35.4, 29.4, 10.9, 3.26, 
1.29)), .Names = c("ID", "TIME", "CONC"), class = "data.frame",
row.names = c(NA, -12L))