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.denzin...@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.pi...@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-boun...@r-project.org [mailto:r-help-bounces@r- >>> project.org] On Behalf Of fd >>> Sent: Thursday, July 31, 2014 4:37 PM >>> To: r-help@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@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@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. ______________________________________________ R-help@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.