gpt4 book ai didi

R:从字符转换为 POSIXct 会损失数小时和数分钟

转载 作者:行者123 更新时间:2023-12-05 01:31:20 25 4
gpt4 key购买 nike

早上好

我正在尝试从字符转换为 POSIXct,但是当我这样做时,我丢失了数据中的小时和分钟。

hourlyData(数据框)

    Login   Expo    EquityUSD   Period                    UnrealizedProfitUSD
1 252957 0.00 7.187185 2014-02-03 00:00:00.000 0.00000
2 252957 0.00 7.187772 2014-02-03 01:00:00.000 0.00000
3 252957 0.00 7.188198 2014-02-03 02:00:00.000 0.00000
4 252957 0.00 7.187825 2014-02-03 03:00:00.000 0.00000
5 252957 0.00 7.187079 2014-02-03 04:00:00.000 0.00000
6 252957 0.00 7.187079 2014-02-03 05:00:00.000 0.00000
7 252957 0.00 7.188731 2014-02-03 06:00:00.000 0.00000
8 252957 0.00 7.186279 2014-02-03 07:00:00.000 0.00000
9 252957 0.00 7.187185 2014-02-03 08:00:00.000 0.00000

当我键入 class(hourlyData$Period) 时,我得到 Character。但是,当我尝试将此列转换为 hourlyData$Period = as.POSIXct(hourlyData$Period) 时,我得到以下输出:
每小时数据

    Login   Expo    EquityUSD   Period       UnrealizedProfitUSD
1 252957 0.00 7.187185 2014-02-03 0.00000
2 252957 0.00 7.187772 2014-02-03 0.00000
3 252957 0.00 7.188198 2014-02-03 0.00000
4 252957 0.00 7.187825 2014-02-03 0.00000
5 252957 0.00 7.187079 2014-02-03 0.00000
6 252957 0.00 7.187079 2014-02-03 0.00000
7 252957 0.00 7.188731 2014-02-03 0.00000
8 252957 0.00 7.186279 2014-02-03 0.00000
9 252957 0.00 7.187185 2014-02-03 0.00000

小时和分钟已从 Period 列中删除。有谁知道为什么会发生这种情况,或者如何预防这种情况?

谢谢

迈克

最佳答案

其他答案暗示了这个问题,但并没有真正解决它。 as.POSIXct(...) 在传递带有无效时间的字符向量时会出现奇怪的行为:as.POSIXct(... ) 删除所有元素的时间部分

您可以通过明确提供格式规范来“修复”此问题,即使您使用的是默认规范(请参阅下面的最后一行)。

x <- sprintf('%02d:00:00', 20:25)          # 25:00:00 is not a valid time spec.
y <- sprintf('%s %s', '2018-01-01',x) # last element has invalid time
as.POSIXct(head(y,-1)) # works fine
## [1] "2018-01-01 20:00:00 HST" "2018-01-01 21:00:00 HST" "2018-01-01 22:00:00 HST" "2018-01-01 23:00:00 HST" "2018-01-02 00:00:00 HST"
as.POSIXct(y) # fails miserably
## [1] "2018-01-01 HST" "2018-01-01 HST" "2018-01-01 HST" "2018-01-01 HST" "2018-01-01 HST" "2018-01-01 HST"
as.POSIXct(y, tz='UTC') # tz does not fix this...
## [1] "2018-01-01 UTC" "2018-01-01 UTC" "2018-01-01 UTC" "2018-01-01 UTC" "2018-01-01 UTC" "2018-01-01 UTC"
as.POSIXct(y, format='%Y-%m-%d %H:%M:%S') # but this does...
## [1] "2018-01-01 20:00:00 HST" "2018-01-01 21:00:00 HST" "2018-01-01 22:00:00 HST" "2018-01-01 23:00:00 HST" "2018-01-02 00:00:00 HST" NA

在 Win 7 x64 上运行 R 3.4.0。

关于R:从字符转换为 POSIXct 会损失数小时和数分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27143775/

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