Hi
Maybe others will disagree but I find for cycle for this type of task better
than sapply.
for(i in 1:length(ind)) {
if (there are more than 3 date items*) {
postscript(ind[i])
do all plotting
dev.off()
}}
If you want to plot with gaps you need to add all relevant YEARs for x axis with
missing value in y before plotting. Then R plots it automatically with gap.
x<-1:10
y<-rnorm(10)
y[5:6]<-NA
plot(x,y, type="b")
I would suggest to use merge for this task.
table(dat$ID)
gives you number of unique values for each ID and you can use it for discarding
this ID from the list.
Regards
Petr
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of fd
> Sent: Thursday, July 31, 2014 4:37 PM
> To: r-help at r-project.org
> Subject: [R] Multiple plots and postscripts using split function
>
> Hi,
>
> I'm relatively new to R and I would like to do the following:
>
> I have a .csv file with four columns (NAME, ID, YEAR, VALUE) and would
> like to do several xy plots with the year on the x-axis and the data
> values
> (measurements) on the y-axis and after that export the different plots
> to postcript.
>
> My .csv file looks something like this (only an example):
>
> NAME ID YEAR VALUE
> ADAMS 885 1988 -2
> ADAMS 885 1989 0
> BAHIA DEL DIABLO 2665 1999 4
> BAHIA DEL DIABLO 2665 2000 8
> BAHIA DEL DIABLO 2665 2001 19
> BAHIA DEL DIABLO 2665 2002 13
> BAHIA DEL DIABLO 2665 2003 13
> BARTLEY 893 1983 0
> BARTLEY 893 1984 -1
> BARTLEY 893 1985 0
> BARTLEY 893 1988 2
> BARTLEY 893 1989 -1
> CANADA 877 1972 -1
>
> I have split the different items into groups and I'd like the plots to
> have the title of NAME but the filename of the postscript to be
> exported should have the ID as filename.
>
> My code so far:
>
> #Set Working Directory:
> setwd("/Users/Desktop/FV")
> # Read CSV
> dat <- read.csv("FV.csv", sep=";", header=TRUE) #
Split Data ind <-
> split(x = dat,f = dat[,'ID']) nam <- names(ind)
>
> sapply(nam, function(x) {
> postscript(x)
> par(mar=c(6,8,6,5), cex=0.8)
> plot(ind[[x]][,c('YEAR','VALUE')],
> type='b',
> main = x,
> xlab="Time [Years]",
> ylab="Front variation")
> axis(1, at = seq(1800,2100,5), cex.axis=1, labels=FALSE, tcl=-
> 0.3)
> axis(2, at = seq(-100000,100000,500), cex.axis=1, labels=FALSE,
> tcl=-0.3)
>
> dev.off()
> })
>
> This results in plots with the title and filename of the resulting
> postscript being the same. Is there a way to get the plot title out of
> the NAME column and the filename out of the ID?
>
> Additionally I'd only like to plot graphs for items with more than 3
> data values. Is this possible to incorporate in the split command?
>
> Another point is that some items have gaps in the time series where no
> measurements were taken (in my example: BARTLEY from 1983 to 1985 and
> 1988 to 1989). I would like to plot using type= 'b' so that the
points
> are connected with lines, but when doing that, the values between 1985
> and 1988 are automatically connected which I don't want. I'd like
the
> plot to start again at the value where the gap ends (in my example from
> 1988 onwards). Is there a solution for this?
>
> Any help is kindly appreciated! Thanks for your help.
>
> Kind regards,
> fd
>
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Multiple-
> plots-and-postscripts-using-split-function-tp4694850.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.
________________________________
Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny
pouze jeho adres?t?m.
Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho
odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho
syst?mu.
Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email
jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i
zpo?d?n?m p?enosu e-mailu.
V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
- vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a
to z jak?hokoliv d?vodu i bez uveden? d?vodu.
- a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout;
Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce
s dodatkem ?i odchylkou.
- trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m
dosa?en?m shody na v?ech jej?ch n?le?itostech.
- odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost
??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn?
pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn?
osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi
?i osob? j?m zastoupen? zn?m?.
This e-mail and any documents attached to it may be confidential and are
intended only for its intended recipients.
If you received this e-mail by mistake, please immediately inform its sender.
Delete the contents of this e-mail with all attachments and its copies from your
system.
If you are not the intended recipient of this e-mail, you are not authorized to
use, disseminate, copy or disclose this e-mail in any manner.
The sender of this e-mail shall not be liable for any possible damage caused by
modifications of the e-mail or by delay with transfer of the email.
In case that this e-mail forms part of business dealings:
- the sender reserves the right to end negotiations about entering into a
contract in any time, for any reason, and without stating any reasoning.
- if the e-mail contains an offer, the recipient is entitled to immediately
accept such offer; The sender of this e-mail (offer) excludes any acceptance of
the offer on the part of the recipient containing any amendment or variation.
- the sender insists on that the respective contract is concluded only upon an
express mutual agreement on all its aspects.
- the sender of this e-mail informs that he/she is not authorized to enter into
any contracts on behalf of the company except for cases in which he/she is
expressly authorized to do so in writing, and such authorization or power of
attorney is submitted to the recipient or the person represented by the
recipient, or the existence of such authorization is known to the recipient of
the person represented by the recipient.