web-dev-qa-db-ja.com

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"は本当に...汚いようです。

24
Zach

私は個人的にはinheritsjoran の提案どおりに使用します。これを使用して、独自の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 
25
Joshua Ulrich

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
7
Rich Scriven