早上好,
我正在尝试将字符转换为POSIXct,但是当我这样做时,我会丢失数据的小时和分钟。
hourlyData(dataframe)
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)
时,我得到以下输出:
hourlyData
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
从“期间”列中删除小时和分钟的位置。有谁知道为什么会发生这种情况,或者如何预防呢?
由于
麦克
答案 0 :(得分:1)
其他答案暗示了问题,但并未真正解决问题。当使用无效时间传递字符向量时,as.POSIXct(...)
具有奇怪的行为:as.POSIXct(...)
删除所有元素的时间部分,而不是为具有无效时间的元素返回NA。
你可以修复"这可以通过明确提供格式规范,即使您使用的是默认规范(参见下面的最后一行)。
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。
答案 1 :(得分:0)
我使用strptime
:
char_data = c('2014-02-03 00:00:00.000', '2014-02-03 01:00:00.000', '2014-02-03 02:00:00.000')
strptime(char_data, '%Y-%m-%d %H:%M:%S')
[1] "2014-02-03 00:00:00 CET" "2014-02-03 01:00:00 CET"
[3] "2014-02-03 02:00:00 CET"
答案 2 :(得分:0)
&#34; 2014-03-31 03:00:00&#34;不是您居住的有效日期时间,因为&#34; 2014-03-31 02:59:59&#34;紧接着是&#34; 2014-03-31 04:00:00&#34;由于切换到夏令时。