format_time | R Documentation |
A function to parse class POSIX.ct or text strings of date-time data to
numeric time for use in respR
functions.
format_time(x, time = 1, format = "ymdHMS", start = 1)
x |
vector or data frame containing strings or class POSIX.ct date-time data to be converted to numeric. |
time |
numeric value or vector. Specifies column(s) containing date-time
data. Default is |
format |
string. Code describing structure of date-time data. See Details. |
start |
numeric. At what time (in seconds) should the formatted time
data start? Default is |
Regardless of input, all data are parsed to numeric time data in seconds
duration from the first entry starting at 1. If you want the times to start
at a different time, a start
value can be specified, in which case the
series starts at that number (in seconds) and all subsequent times are
shifted forward by the same amount.
Input can be a vector, or data frame. If a data frame, the column(s) of the
date-time data are specified using the time
input. By default the first
column is assumed to contain the date-time data (i.e. time = 1
).
If the date-time data is split over several columns (e.g. date in one column,
time in another), multiple columns can be specified (e.g. time = c(1,2)
).
In this case, the format
setting should reflect the correct order as
entered in time
.
Time-only data, that is times which lack an associated date, can also be
parsed. Normally, parsing time-only data will cause problems when the times
cross midnight (i.e. 00:00:00
). However, the function attempts to identify
when this occurs and parse the data correctly.
See the lubridate
package for more detail on acceptable
formatting.
Date-time data can be unspaced or separated by any combination of spaces,
forward slashes, hyphens, dots, commas, colons, semicolons, or underscores.
E.g. all these are parsed as the same date-time: "2010-02-28 13:10:23", "20100228131023", "2010,02/28 13.10;23", "2010 02 28 13_10-23"
.
Times can be in 24H or 12H with AM/PM
E.g. "2010-02-28 13:10:23" or
"2010-02-28 1:10:23 PM"
Times without initial zero are parsed as 24H time
E.g. "1:10:23" is
same as "1:10:23 AM" or "01:10:23"
AM/PM take precedence over 24H formatting for 01-12h
E.g. "1:10:23 PM"
and "01:10:23 PM" are both same as "13:10:23"
However, 24H formatting for 13-24h takes precedence over AM/PM
E.g.
"13:10:23 AM" is identified as "1:10:23 PM" or "13:10:23"
Specify the order of year, month, day, and time in your date-time input.
d
- Day of the month as decimal number (01–31 or 1–31).
m
- Month of the year as decimal number (01–12 or 1–12).
y
- Year (2010, 2001, 1989).
H
- Hour as decimal number (00–24 or 0–24 or 00-12 (see p
)).
M
- Minute as decimal number (00–59 or 0–59).
S
- Second as decimal number (00–59 or 0–59).
p
- AM/PM indicator for 12-h date-time format (e.g. "01/12/2020 1:30:44 PM
" would be "dmyHMSp"
).
Specify the order using the format
input, using separators or not
(optional): "dmyHMS"
; "dmy_HMS"
and "d m y H M S"
are all the same. See
Examples.
Single experimental datasets should never span different time zones, so if a time zone is present it is ignored for the purposes of calculating numeric times.
For additional help, documentation, vignettes, and more visit the respR
website at https://januarharianto.github.io/respR/
Output: If the input is a vector, output is a vector of equal
length containing the numeric time data. For data frame inputs, an
identical data frame is returned, with a new column named time_num
added
as the final column.
lubridate
# Convert year-month-day hour-min-sec
x <- c("09-02-03 01:11:11", "09-02-03 02:11:11","09-02-03 02:25:11")
format_time(x)
# Convert day-month-year hour-min, and use a separator in the format
x <- c("03-02-09 01:11", "03-02-09 02:11","03-02-09 02:25")
format_time(x, format = "dmy_HM")
# Convert when AM/PM is present
x <- c("09-02-03 11:11:11 AM", "09-02-03 12:11:11 PM","09-02-03 01:25:11 PM")
# This is WRONG - the AM/PM indicator is missing
format_time(x, format = "dmyHMS")
# This is correct
format_time(x, format = "dmyHMSp")
# Convert dataframe with year-month-day hour-min-sec (ymdHMS default)
x <- data.frame(
x = c("09-02-03 01:11:11", "09-02-03 02:11:11","09-02-03 02:25:11"),
y = c(23, 34, 45))
format_time(x, time = 1)
# Convert dataframe with time in a different column and non-default format
x <- data.frame(
x = c(23, 34, 45),
y = c("09-02-2018 11:11:11 AM", "09-02-2018 12:11:11 PM","09-02-2018 01:25:11 PM"),
z = c(56, 67, 78))
format_time(x, time = 2, format = "dmyHMSp")
# Convert dataframe with separate date and time columns, and times crossing midnight
x <- data.frame(
w = c("09-02-18", "09-02-18","10-02-18"),
x = c("22:11:11", "23:11:11","00:25:11"),
y = c(23, 34, 45),
z = c(56, 67, 78))
# Crosses midnight, but parses correctly even without dates
format_time(x, time = 2, format = "HMS")
# Include dates to double check
format_time(x, time = 1:2, format = "dmyHMS")
# Input same as different column order & appropriate format order
format_time(x, time = 2:1, format = "HMSdmy")
# Convert a data frame with date and time split over multiple columns
x <- data.frame(
u = c("09", "09","10"),
v = c("02", "02","02"),
w = c("2018", "2018","2018"),
x = c("22:11:11", "23:11:11","00:25:11"),
y = c(23, 34, 45),
z = c(56, 67, 78))
format_time(x, time = 1:4, format = "dmyHMS")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.