Hello, I hope someone can help me with my problem: I have a dataframe like this: datframe <- data.frame(dates=c("02.08.2013","03.08.2013","03.08.2013"), times =c("22:10","4:04", "10:18"), tide =c("NW","HW", "NW")) datframe Timestamp <- paste(datframe$dates, datframe$times) myframe2 <- cbind( Timestamp,datframe) head(myframe2) myframe2$dates <- NULL myframe2$times <- NULL myframe2$Timestamp <- as.POSIXct (strptime(myframe2$Timestamp, "%d.%m.%Y %H:%M"), tz="GMT") head(myframe2) str(myframe2) # In the end I want a frame like this: datframeres <- data.frame(Timestamp=c("2013-08-02 22:10:00", "2013-08-02 23:09:00","2013-08-03 00:08:00","2013-08-03 01:07:00", "2013-08-03 02:06:00", "2013-08-03 03:05:00", "2013-08-03 04:04:00","2013-08-03 05:06:20","2013-08-03 06:08:40", "2013-08-03 07:11:00", "2013-08-03 08:13:20", "2013-08-03 09:15:40", "2013-08-03 10:18:00") , tidalclass =c("NW", "HW-5","HW-4", "HW-3", "HW-2", "HW-1", "HW", "HW+1","HW+2","HW+3", "HW+4","HW+5", "NW")) datframeres # That means: I want to expand to 13 classes instead of the two classes "HW" and "NW": "HW", "HW+1", "HW+2" and so on. # The time gap between HW and NW is not always quite the same (always around 6 hours). So I would divide the time gap by 6 and add this number (0:59 and 1:02:20 respectively) to the timestamp before. # I do not know how to do this. Does anyone know how to do this? Many thanks in advance! Tagmarie
Hi I am not completely sure what you want. Maybe something like datframe$datum<-strptime(paste(datframe[,1], datframe[,2]), format="%d.%m.%Y %H:%M") datframe$datum <- strptime(format(datframe$datum, "%d.%m.%Y %H"), format="%d.%m.%Y %H") datframe$datum<-as.POSIXct(datframe$datum) dat<-seq(min(datframe$datum), by="hour", length.out=50) temp<-data.frame(dat=dat) myframe <- merge(datframe, temp, by.x="datum", by.y="dat", all=TRUE) can help you a bit. You can fill missing tides by e.g. na.locf from zoo package. I know that it is not exactly what you wanted, however it seems to me that having data frame with equally spaced time can be better approach than dividing unequal intervals to 6 portions. Cheers Petr> -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Dagmar > Sent: Thursday, December 03, 2015 11:52 AM > To: R help > Subject: [R] expand dataframe but time gap is not the same > > Hello, > I hope someone can help me with my problem: > I have a dataframe like this: > > datframe <- data.frame(dates=c("02.08.2013","03.08.2013","03.08.2013"), > times =c("22:10","4:04", "10:18"), tide =c("NW","HW", "NW")) > datframe > Timestamp <- paste(datframe$dates, datframe$times) > myframe2 <- cbind( Timestamp,datframe) > head(myframe2) > myframe2$dates <- NULL > myframe2$times <- NULL > myframe2$Timestamp <- as.POSIXct (strptime(myframe2$Timestamp, > "%d.%m.%Y > %H:%M"), tz="GMT") > head(myframe2) > str(myframe2) > > # In the end I want a frame like this: > datframeres <- data.frame(Timestamp=c("2013-08-02 22:10:00", "2013-08- > 02 > 23:09:00","2013-08-03 00:08:00","2013-08-03 01:07:00", "2013-08-03 > 02:06:00", "2013-08-03 03:05:00", > "2013-08-03 04:04:00","2013-08-03 05:06:20","2013-08-03 06:08:40", > "2013-08-03 07:11:00", "2013-08-03 08:13:20", "2013-08-03 09:15:40", > "2013-08-03 10:18:00") > , tidalclass =c("NW", "HW-5","HW-4", "HW-3", "HW-2", "HW-1", "HW", > "HW+1","HW+2","HW+3", "HW+4","HW+5", "NW")) > > datframeres > > # That means: I want to expand to 13 classes instead of the two classes > "HW" and "NW": "HW", "HW+1", "HW+2" and so on. > # The time gap between HW and NW is not always quite the same (always > around 6 hours). So I would divide the time gap by 6 and add this > number > (0:59 and 1:02:20 respectively) to the timestamp before. > # I do not know how to do this. Does anyone know how to do this? Many > thanks in advance! > Tagmarie > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
Hello Petr, hi all, Thank you very much for trying to help me Petr! Unfortunately it didn't bring me further. I do not want to round on full hours but I want uneven intervals to 6 portions. That is probably the biggest part of my problem. Does anyone know a solution? That would be very, very good Thank you in advance, Dagmar Am 03.12.2015 um 15:30 schrieb PIKAL Petr:> Hi > > I am not completely sure what you want. > > Maybe something like > > datframe$datum<-strptime(paste(datframe[,1], datframe[,2]), format="%d.%m.%Y %H:%M") > datframe$datum <- strptime(format(datframe$datum, "%d.%m.%Y %H"), format="%d.%m.%Y %H") > datframe$datum<-as.POSIXct(datframe$datum) > > dat<-seq(min(datframe$datum), by="hour", length.out=50) > temp<-data.frame(dat=dat) > myframe <- merge(datframe, temp, by.x="datum", by.y="dat", all=TRUE) > > can help you a bit. > > You can fill missing tides by e.g. na.locf from zoo package. > > I know that it is not exactly what you wanted, however it seems to me that having data frame with equally spaced time can be better approach than dividing unequal intervals to 6 portions. > > Cheers > Petr > > >> -----Original Message----- >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Dagmar >> Sent: Thursday, December 03, 2015 11:52 AM >> To: R help >> Subject: [R] expand dataframe but time gap is not the same >> >> Hello, >> I hope someone can help me with my problem: >> I have a dataframe like this: >> >> datframe <- data.frame(dates=c("02.08.2013","03.08.2013","03.08.2013"), >> times =c("22:10","4:04", "10:18"), tide =c("NW","HW", "NW")) >> datframe >> Timestamp <- paste(datframe$dates, datframe$times) >> myframe2 <- cbind( Timestamp,datframe) >> head(myframe2) >> myframe2$dates <- NULL >> myframe2$times <- NULL >> myframe2$Timestamp <- as.POSIXct (strptime(myframe2$Timestamp, >> "%d.%m.%Y >> %H:%M"), tz="GMT") >> head(myframe2) >> str(myframe2) >> >> # In the end I want a frame like this: >> datframeres <- data.frame(Timestamp=c("2013-08-02 22:10:00", "2013-08- >> 02 >> 23:09:00","2013-08-03 00:08:00","2013-08-03 01:07:00", "2013-08-03 >> 02:06:00", "2013-08-03 03:05:00", >> "2013-08-03 04:04:00","2013-08-03 05:06:20","2013-08-03 06:08:40", >> "2013-08-03 07:11:00", "2013-08-03 08:13:20", "2013-08-03 09:15:40", >> "2013-08-03 10:18:00") >> , tidalclass =c("NW", "HW-5","HW-4", "HW-3", "HW-2", "HW-1", "HW", >> "HW+1","HW+2","HW+3", "HW+4","HW+5", "NW")) >> >> datframeres >> >> # That means: I want to expand to 13 classes instead of the two classes >> "HW" and "NW": "HW", "HW+1", "HW+2" and so on. >> # The time gap between HW and NW is not always quite the same (always >> around 6 hours). So I would divide the time gap by 6 and add this >> number >> (0:59 and 1:02:20 respectively) to the timestamp before. >> # I do not know how to do this. Does anyone know how to do this? Many >> thanks in advance! >> Tagmarie >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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.
You can use the approx() function (in that stats package) to put 5 equally spaced times between your high and low water times. E.g., in the following 'tmp' will be your interpolated times, in seconds since 1970, which I clumsily convert to POSIX times (I can never remember how to deal with time zones so I make everything use UTC).> tmp <- with(myframe2, approx(x=seq(1, by=6, length.out=length(Timestamp)), y=as.numeric(Timestamp), xout=seq(1,by=1,length.out=6*(length(Timestamp)-1)+1))$y) > as.POSIXct(i, origin="1970-01-01 00:00", tz="UTC")[1] "2013-08-02 22:10:00 UTC" "2013-08-02 23:09:00 UTC" [3] "2013-08-03 00:08:00 UTC" "2013-08-03 01:07:00 UTC" [5] "2013-08-03 02:06:00 UTC" "2013-08-03 03:05:00 UTC" [7] "2013-08-03 04:04:00 UTC" "2013-08-03 05:06:20 UTC" [9] "2013-08-03 06:08:40 UTC" "2013-08-03 07:11:00 UTC" [11] "2013-08-03 08:13:20 UTC" "2013-08-03 09:15:40 UTC" [13] "2013-08-03 10:18:00 UTC"> diff(.Last.value)Time differences in mins [1] 59.00000 59.00000 59.00000 59.00000 59.00000 59.00000 62.33333 62.33333 [9] 62.33333 62.33333 62.33333 62.33333 Bill Dunlap TIBCO Software wdunlap tibco.com On Thu, Dec 3, 2015 at 2:51 AM, Dagmar <Ramgad82 at gmx.net> wrote:> Hello, > I hope someone can help me with my problem: > I have a dataframe like this: > > datframe <- data.frame(dates=c("02.08.2013","03.08.2013","03.08.2013"), > times =c("22:10","4:04", "10:18"), tide =c("NW","HW", "NW")) > datframe > Timestamp <- paste(datframe$dates, datframe$times) > myframe2 <- cbind( Timestamp,datframe) > head(myframe2) > myframe2$dates <- NULL > myframe2$times <- NULL > myframe2$Timestamp <- as.POSIXct (strptime(myframe2$Timestamp, "%d.%m.%Y > %H:%M"), tz="GMT") > head(myframe2) > str(myframe2) > > # In the end I want a frame like this: > datframeres <- data.frame(Timestamp=c("2013-08-02 22:10:00", "2013-08-02 > 23:09:00","2013-08-03 00:08:00","2013-08-03 01:07:00", "2013-08-03 > 02:06:00", "2013-08-03 03:05:00", > "2013-08-03 04:04:00","2013-08-03 05:06:20","2013-08-03 06:08:40", > "2013-08-03 07:11:00", "2013-08-03 08:13:20", "2013-08-03 09:15:40", > "2013-08-03 10:18:00") > , tidalclass =c("NW", "HW-5","HW-4", "HW-3", "HW-2", "HW-1", "HW", > "HW+1","HW+2","HW+3", "HW+4","HW+5", "NW")) > > datframeres > > # That means: I want to expand to 13 classes instead of the two classes "HW" > and "NW": "HW", "HW+1", "HW+2" and so on. > # The time gap between HW and NW is not always quite the same (always around > 6 hours). So I would divide the time gap by 6 and add this number (0:59 and > 1:02:20 respectively) to the timestamp before. > # I do not know how to do this. Does anyone know how to do this? Many thanks > in advance! > Tagmarie > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
Hello Bill (and Petr and all), Thank you very much! That was exactly what I was looking for! I could have never accomplished that on my own. Have a great time, Tagmarie Am 09.12.2015 um 18:07 schrieb William Dunlap:> You can use the approx() function (in that stats package) to put > 5 equally spaced times between your high and low water times. > E.g., in the following 'tmp' will be your interpolated times, in seconds > since 1970, which I clumsily convert to POSIX times (I can never > remember how to deal with time zones so I make everything use UTC). > >> tmp <- with(myframe2, approx(x=seq(1, by=6, length.out=length(Timestamp)), y=as.numeric(Timestamp), xout=seq(1,by=1,length.out=6*(length(Timestamp)-1)+1))$y) >> as.POSIXct(i, origin="1970-01-01 00:00", tz="UTC") > [1] "2013-08-02 22:10:00 UTC" "2013-08-02 23:09:00 UTC" > [3] "2013-08-03 00:08:00 UTC" "2013-08-03 01:07:00 UTC" > [5] "2013-08-03 02:06:00 UTC" "2013-08-03 03:05:00 UTC" > [7] "2013-08-03 04:04:00 UTC" "2013-08-03 05:06:20 UTC" > [9] "2013-08-03 06:08:40 UTC" "2013-08-03 07:11:00 UTC" > [11] "2013-08-03 08:13:20 UTC" "2013-08-03 09:15:40 UTC" > [13] "2013-08-03 10:18:00 UTC" >> diff(.Last.value) > Time differences in mins > [1] 59.00000 59.00000 59.00000 59.00000 59.00000 59.00000 62.33333 62.33333 > [9] 62.33333 62.33333 62.33333 62.33333 > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Thu, Dec 3, 2015 at 2:51 AM, Dagmar <Ramgad82 at gmx.net> wrote: >> Hello, >> I hope someone can help me with my problem: >> I have a dataframe like this: >> >> datframe <- data.frame(dates=c("02.08.2013","03.08.2013","03.08.2013"), >> times =c("22:10","4:04", "10:18"), tide =c("NW","HW", "NW")) >> datframe >> Timestamp <- paste(datframe$dates, datframe$times) >> myframe2 <- cbind( Timestamp,datframe) >> head(myframe2) >> myframe2$dates <- NULL >> myframe2$times <- NULL >> myframe2$Timestamp <- as.POSIXct (strptime(myframe2$Timestamp, "%d.%m.%Y >> %H:%M"), tz="GMT") >> head(myframe2) >> str(myframe2) >> >> # In the end I want a frame like this: >> datframeres <- data.frame(Timestamp=c("2013-08-02 22:10:00", "2013-08-02 >> 23:09:00","2013-08-03 00:08:00","2013-08-03 01:07:00", "2013-08-03 >> 02:06:00", "2013-08-03 03:05:00", >> "2013-08-03 04:04:00","2013-08-03 05:06:20","2013-08-03 06:08:40", >> "2013-08-03 07:11:00", "2013-08-03 08:13:20", "2013-08-03 09:15:40", >> "2013-08-03 10:18:00") >> , tidalclass =c("NW", "HW-5","HW-4", "HW-3", "HW-2", "HW-1", "HW", >> "HW+1","HW+2","HW+3", "HW+4","HW+5", "NW")) >> >> datframeres >> >> # That means: I want to expand to 13 classes instead of the two classes "HW" >> and "NW": "HW", "HW+1", "HW+2" and so on. >> # The time gap between HW and NW is not always quite the same (always around >> 6 hours). So I would divide the time gap by 6 and add this number (0:59 and >> 1:02:20 respectively) to the timestamp before. >> # I do not know how to do this. Does anyone know how to do this? Many thanks >> in advance! >> Tagmarie >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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.