Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测data.frame中的列是否为.POSIXct的可靠方法_R_Datetime_Posixct - Fatal编程技术网

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

检测data.frame中的列是否为.POSIXct的可靠方法,r,datetime,posixct,R,Datetime,Posixct,R有是.vector,是.list,是.integer,是.double,是.numeric,是.factor,是.character,等等。为什么没有是.POSIXct,是.POSIXlt或是.Date 我需要一种可靠的方法来检测POSIXct对象,而且class(x)[1]==“POSIXct”似乎真的。。。脏。润滑油包具有is.POSIXt,is.POSIXct,is.POSIXlt和is.Date功能。您可以尝试is()。这就是lubridate函数所依赖的.Date和所依赖的.POSI

R有
是.vector
是.list
是.integer
是.double
是.numeric
是.factor
是.character
,等等。为什么没有
是.POSIXct
是.POSIXlt
是.Date


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

润滑油
包具有
is.POSIXt
is.POSIXct
is.POSIXlt
is.Date
功能。

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

x我个人会按照建议使用
inherits
。您可以使用它创建自己的
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 
#函数

is.POSIXct如果只检查类,
inherits
可能会感觉更干净。当然。我试图在base R中执行此操作,但忘记了lubridate。如果
x
is,则POSIXt
返回TRUE,如果类是
POSIXlt
POSIXct
。是的,这就是我的观点。它不能帮助您区分POSIXct和POSIXlt。添加了澄清。谢谢。在这种情况下这并不重要,但是
inherits
是为S3设计的,直接转到C代码,而
is
需要处理S4并对其他R函数进行多次调用。