gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:32:49 26 4
gpt4 key购买 nike

数据

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一起使用的等效操作是什么?
非常感谢

最佳答案

您误解了POSIXltPOSIXct之间的关键区别:

  • POSIXlt是一个“列表类型”,具有与
  • 一样可以访问的组件
  • POSIXct是一个“紧凑类型”,实际上只是一个数字

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

    在上面执行 str()unclass很有启发性。由于历史原因, strptime()返回 POSIXlt。我希望它会返回 POSIXct

    关于r - R中子集POSIXlt和POSIXct之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28996355/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com