R中子集POSIXlt和POSIXct之间的区别

Jpinelo

数据

v1 <- c("2015-01-05 15:00:00", "2015-01-05 15:45:00", "2015-01-05 15:00:30")

操作方式

v2 <- strptime(v1, '%Y-%m-%d %H:%M:%S')
str(v2)
POSIXlt[1:3], format: "2015-01-05 15:00:00" "2015-01-05 15:45:00" "2015-01-05 15:00:30"

v3 <- v2[!v2$min]  # create v3 from v2 eliminating min != 00

结果(成功设置)

str(v3)
POSIXlt[1:2], format: "2015-01-05 15:00:00" "2015-01-05 15:00:30"

现在通过将v2强制为POSIXct创建v4(成功)

v4 <- as.POSIXct(v2, format = "%y/%m/%d  %H:%M")

str(v4)
POSIXct[1:3], format: "2015-01-05 15:00:00" "2015-01-05 15:45:00" "2015-01-05 15:00:30"

问题中的操作-对POSIXct应用与POSIXlt相同的子集操作会导致以下错误

v5 <- v4[!v4$min]  # reassign v2 eliminating min != 00

结果(错误)

  Error in v4$min : $ operator is invalid for atomic vectors

问题:
a)为什么这种行为差异?
b)与POSIXct一起使用的等效操作是什么?
非常感谢

德克·埃德比布特尔

您误解了POSIXlt之间的关键区别POSIXct

  • POSIXlt 是“列表类型”,其中包含您可以在访问时访问的组件
  • POSIXct 是一个“紧凑型”,实际上只是一个数字

您几乎总是希望POSIXct进行比较和有效存储(例如,在中data.frame,或使用索引对象zooxts对象),并可以POSIXlt用来访问组件。但是要注意,这些组件遵循C库标准,因此,例如,当前年份是115(因为您总是需要加上1900),工作日从零开始,以pp为单位。

在上面str()unclass上面照亮。由于历史原因,strptime()返回POSIXlt希望它能返回一个POSIXct

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章