检测data.frame中的列是否为.POSIXct的可靠方法

时间:2014-10-16 20:05:35

标签: r datetime posixct

R有is.vectoris.listis.integeris.doubleis.numericis.factoris.character等。为什么没有is.POSIXctis.POSIXltis.Date

我需要一种可靠的方法来检测POSIXct对象,而class(x)[1] == "POSIXct"似乎真的......很脏。

3 个答案:

答案 0 :(得分:23)

我个人只会使用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 

答案 1 :(得分:17)

lubridate包具有is.POSIXtis.POSIXctis.POSIXltis.Date个功能。

答案 2 :(得分:7)

您可以尝试is()。这就是lubridate函数is.Dateis.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