更改列中类的顺序

Change order of classes in column

提问人:Nova 提问时间:10/7/2023 最后编辑:Nova 更新时间:10/7/2023 访问量:42

问:

我有一个日期时间对象,如下所示:

one <- structure(1678982734, class = c("POSIXt", "POSIXct"), tzone = "UTC")
但是当我尝试将其与另一个类切换的数据帧连接时,例如,
连接失败。如何告诉 R 切换定义列类型的类向量的顺序?
two <- structure(1678982734, class = c("POSIXct", "POSIXt"), tzone = "UTC")

对于遇到相同问题的任何人,我正在粘贴来自重叠连接的实际错误消息:dplyr

Error in `full_join()`:
! Can't join `x$timestamp` with `y$deploy_on_date` due to incompatible types.
ℹ `x$timestamp` is a <datetime<UTC>>.
ℹ `y$deploy_on_date` is a <POSIXt>.
Run `rlang::last_trace()` to see where the error occurred.
r datetime 联接 posixct 列类型

评论

2赞 Joshua Ulrich 10/7/2023
对象是如何创建的?class = c("POSIXt", "POSIXct")
2赞 MrFlick 10/7/2023
你可以做.但这听起来像是任何函数首先返回“POSIXt”的错误。这些类应从最具体到最不具体。class(one) <- rev(class(one))
0赞 Nova 10/7/2023
啊,好的 MrFlick,也许这是一个错误,需要与从 ArcGIS Online 导入我的数据的包一起提交。

答:

1赞 Joshua Ulrich 10/7/2023 #1

这是一个错误,无论使用什么创建对象。正如@MrFlick所评论的那样,“类”向量应该按继承顺序排列。“POSIXct”继承自“POSIXt”,而不是相反。class = c("POSIXt", "POSIXct")

此外,“POSIXt”是一个“虚拟”类,这意味着你不能创建一个只是 .它存在的唯一原因是“POSIXct”和“POSIXlt”对象可以一起操作(例如,从“POSIXlt”对象中减去“POSIXct”对象)。class = "POSIXt"

同样正如 MrFlick 所说,如果类向量格式不正确,您可以反转它。

check_posix_class <- function(x) {
    if (identical(class(x), c("POSIXt", "POSIXct"))) {
        class(x) <- rev(class(x))
    }
    return(x)
}

评论

1赞 Nova 10/7/2023
我提交了错误 github.com/R-ArcGIS/r-bridge/issues/86
2赞 Joshua Ulrich 10/7/2023
@Nova太棒了!感谢您成为出色的社区成员。