[R] expand dataframe but time gap is not the same

William Dunlap wdunlap at tibco.com
Wed Dec 9 18:07:24 CET 2015


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.



More information about the R-help mailing list