Надежный способ определить, является ли столбец в файле data.frame.POSIXct
R имеет is.vector
, is.list
, is.integer
, is.double
, is.numeric
, is.factor
, is.character
и т.д. Почему нет is.POSIXct
, is.POSIXlt
или is.Date
Мне нужен надежный способ обнаружения объекта POSIXct
, а class(x)[1] == "POSIXct"
кажется действительно... грязным.
Ответы
Ответ 1
Я бы просто использовал inherits
как joran. Вы можете использовать его для создания собственной is.POSIXct
функции.
# functions
is.POSIXct <- function(x) inherits(x, "POSIXct")
is.POSIXlt <- function(x) inherits(x, "POSIXlt")
is.POSIXt <- function(x) inherits(x, "POSIXt")
is.Date <- function(x) inherits(x, "Date")
# data
d <- data.frame(pct = Sys.time())
d$plt <- as.POSIXlt(d$pct)
d$date <- Sys.Date()
# checks
sapply(d, is.POSIXct)
# pct plt date
# TRUE FALSE FALSE
sapply(d, is.POSIXlt)
# pct plt date
# FALSE TRUE FALSE
sapply(d, is.POSIXt)
# pct plt date
# TRUE TRUE FALSE
sapply(d, is.Date)
# pct plt date
# FALSE FALSE TRUE
Ответ 2
Пакет lubridate
имеет функции is.POSIXt
, is.POSIXct
, is.POSIXlt
и is.Date
.
Ответ 3
Вы можете попробовать is()
. Это то, на что полагаются функции lubridate
is.Date
и is.POSIX*
.
x <- Sys.time()
class(x)
# [1] "POSIXct" "POSIXt"
is(x, "Date")
#v[1] FALSE
is(x, "POSIXct")
# [1] TRUE
y <- Sys.Date()
class(y)
# [1] "Date"
is(y, "POSIXct")
# [1] FALSE
is(y, "Date")
# [1] TRUE