Shreta Ghimire
Shreta Ghimire

Reputation: 1029

Create a dataframe with columns of given Date and Time

I would like to create a dataframe with its first column as Date and second column as Time. The condition is the time should increase in 30 minutes interval and the date accordingly. And later i will add other columns manually.

> df
Date          Time
2012-01-01    00:00:00
2012-01-01    00:30:00
2012-01-01    01:00:00
2012-01-01    01:30:00
..........    ........
..........    ........
and so on...

EDIT

Can be done in another way as well.

A single column can be created with the given date and time and then separated later using tidyr or any other packages.

> df
DateTime
2012-01-01 00:00:00
2012-01-01 00:30:00
2012-01-01 01:00:00
2012-01-01 01:30:00
.......... 
.......... 
and so on...

Any help will be appreciated. Thank you in advance.

Upvotes: 2

Views: 6470

Answers (1)

SymbolixAU
SymbolixAU

Reputation: 26258

you can generate a sequence using seq, specifying the start and end dates, and the time interval

df <- data.frame(DateTime = seq(as.POSIXct("2012-01-01"),
                                as.POSIXct("2012-02-01"), 
                                by=(30*60)))
head(df)
             DateTime
1 2012-01-01 00:00:00
2 2012-01-01 00:30:00
3 2012-01-01 01:00:00
4 2012-01-01 01:30:00
5 2012-01-01 02:00:00
6 2012-01-01 02:30:00

And to get them in two separate columns we can use ?strftime

date_seq <- seq(as.POSIXct("2012-01-01"), 
                as.POSIXct("2012-02-01"), 
                by=(30*60))

df <- data.frame(Date = strftime(date_seq, format="%Y-%m-%d"),
                 Time = strftime(date_seq, format="%H:%M:%S"))

        Date     Time
1 2012-01-01 00:00:00
2 2012-01-01 00:00:30
3 2012-01-01 00:01:00
4 2012-01-01 00:01:30
5 2012-01-01 00:02:00
6 2012-01-01 00:02:30

Update

You can include the time part of the POSIXct datetime too. This will give you finer control over your upper & lower bounds:

date_seq <- seq(as.POSIXct("2012-01-01 00:00:00"), 
                as.POSIXct("2012-02-02 23:30:00"), 
                by=(30*60))

df <- data.frame(Date = strftime(date_seq, format="%Y-%m-%d"),
                 Time = strftime(date_seq, format="%H:%M:%S"))

Upvotes: 5

Related Questions