Создание отдельных графиков для каждого уникального идентификатора субъекта и сохранение их в рабочем каталоге с идентификационным номером субъекта.

У меня есть огромные данные со многими предметами. Данные имеют следующие столбцы:

    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

Я хотел бы нарисовать отдельный график (CONC против ВРЕМЕНИ) для каждого идентификатора субъекта и автоматически сохранить его в рабочем каталоге с идентификационным номером субъекта.

Я использую простой график, но мне нужна помощь в том, как я могу применить его для всех идентификаторов субъектов и автоматически сохранить графики в моем рабочем каталоге.

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

я использую RStudio

Ваша помощь приветствуется!


person Amer    schedule 06.01.2015    source источник


Ответы (2)


Вы можете сохранить его в одном файле «pdf», по одной странице на график. «Название» графика идентифицирует подмножество «ID». Здесь я использую lapply после разделения (split) набора данных по «ID». Укажите аргументы 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()

Или, если вам нужны «отдельные», .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))
person akrun    schedule 06.01.2015
comment
Спасибо, Акрун. Сохранение всего в один pdf-файл — это круто, иначе у меня будет 560 png-файлов. Спасибо за помощь. - person Amer; 06.01.2015
comment
@ Амер Нет проблем. Я всегда сохраняю в pdf, если только у меня нет пары графиков, которые нужны для публикации. - person akrun; 06.01.2015
comment
какие графики вы используете для публикаций? Я обычно сохраняю их в формате pdf, а затем использую Photoshop, чтобы получить файлы с высоким разрешением для публикации (обычно TIFF). Есть ли способ получить графики качества публикации непосредственно из R с учетом спецификаций журнала? (обычно ширина 500 пикселей и разрешение › 300 dpi) - person Amer; 06.01.2015

Сначала попробуйте получить список идентификаторов

id_arr = unique(sub$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()
}
person Caner    schedule 06.01.2015
comment
Попробуйте улучшить свой ответ, предоставив объяснение вашего кода и / или логики, лежащей в его основе. - person Roman Luštrik; 06.01.2015