Manera confiable de detectar si una columna en un data.frame es.POSIXct
posixct to date r (3)
El paquete lubridate tiene las is.POSIXt , is.POSIXct , is.POSIXlt y is.Date .
R tiene is.vector , is.list , is.integer , is.double , is.numeric , is.factor , is.character , etc. ¿Por qué no hay is.POSIXct , is.POSIXlt o is.Date ?
Necesito una forma confiable de detectar el objeto POSIXct , y la class(x)[1] == "POSIXct" parece realmente ... sucia.
Personalmente solo usaría inherits como joran sugirió. Podrías usarlo para crear tu propia función 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
Puedes intentarlo is() . Esto es lo que las funciones de lubridate son. La is.Date y is.POSIX* dependen de todos modos.
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