[R] Multiple plots and postscripts using split function

William Dunlap wdunlap at tibco.com
Sat Aug 2 16:38:28 CEST 2014


Have you tried using the merge() function?  E.g.,

lapply(split(d, d$NAME), function(di)merge(all=TRUE, di,
data.frame(YEAR=seq(min(di$YEAR), max(di$YEAR), by=1))))
Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Fri, Aug 1, 2014 at 8:22 PM, Florian Denzinger
<florian.denzinger at uzh.ch> wrote:
> Thank you everyone for your help so far.
>
> I am still working on the problem to get a merged new dataframe which fills in new rows with NA values for each year that is missing for plotting with gaps ( in the example the item BARTLEY: years 1984 to 1987 should be filled with a row containing NA values). Could someone maybe help me with this? Thank you.
>
>
>     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             1988            2
>     BARTLEY                             893             1989           -1
>     CANADA                              877             1972           -1
>     CLARK CPI                   894             1973           -3
>
> Am 01.08.2014 um 11:27 schrieb PIKAL Petr <petr.pikal at precheza.cz>:
>
>> 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.
>
> ______________________________________________
> 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.



More information about the R-help mailing list