Подтвердить что ты не робот

Надежный способ определить, является ли столбец в файле 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" кажется действительно... грязным.

4b9b3361

Ответ 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