无法将列强制为R中的相同日期时间类型

iqxoj9l9  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(78)
> class(report_df$LASTACTIVITYDATE)
[1] "POSIXct" "POSIXt"

由于存在POSIXct和POSIXt的混合数据类型,因此我无法正确处理数据。Lubridate出现问题。
当我尝试以下任何一种方法时,它都没有帮助:

library(lubridate)

report_df$LASTACTIVITYDATE <- as.POSIXct(report_df$LASTACTIVITYDATE)

report_df <- report_df %>% mutate(LASTACTIVITYDATE = mdy_hms(LASTACTIVITYDATE))

有时它只是将整个列更改为NA。
其他人有过这种经历吗?

ilmyapht

ilmyapht1#

您的数据是**POSIX * 和 * POSIX *。POSIXt是POSIXct和POSIXlt的一种父类。
来自文档:
“POSIXct”更便于包含在 Dataframe 中,而“POSIXlt”更接近人类可读的形式。一个虚类[(见注1)]“POSIX”继承自这两个类:它用于允许诸如减法的操作来混合两个类。(source
至于为什么你的尝试似乎没有工作:

  • 使用as.POSIXct()不会做任何事情,因为数据已经是POSIX格式
  • mdy_hms()解析字符串,而不是POSIX对象。任何它不能解析的都将返回NA。

备注:
1.“类的存在并没有实际的对象,虚拟类实际上是一个非常重要的编程工具。它们用于将希望共享某些编程行为的普通类组合在一起,而不必限制如何实现该行为。如果你想包含插槽,虚类定义可以(在不完全定义对象的情况下提供一些公共行为-参见traceable-class的示例)。

相关问题