如何在 r 的 POSIXct 中格式化小数秒
How to format fractional seconds in POSIXct in r
我已阅读有关此主题的其他问题,但它们似乎不适用于我的数据集:
Timestamp Bid.price Ask.price Bid.volume Ask.volume
20070313 07:01:04:762 11.14122 11.14478 4.539397 1.891416
20070313 07:01:07:608 11.13930 11.14670 1.277812 3.066750
20070313 07:01:08:701 11.14095 11.14505 0.050396 0.050396
20070313 07:01:11:275 11.14098 11.14502 0.226505 0.543613
20070313 07:01:13:884 11.13930 11.14670 0.322856 0.774855
20070313 07:01:16:588 11.13930 11.14670 0.405654 0.973569
我试过:
as.POSIXct(fx[,1], format="%y%m%d %H:%M:%S:%OS3")
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S:%OS3")
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S")
但我得到的只是 NA
s ...
我该如何解决这个问题?
这是数据集:
fx <- structure(list(Timestamp = c("20070313 07:01:04:762", "20070313 07:01:07:608",
"20070313 07:01:08:701", "20070313 07:01:11:275", "20070313 07:01:13:884",
"20070313 07:01:16:588"), Bid.price = c(11.14122, 11.1393, 11.14095,
11.14098, 11.1393, 11.1393), Ask.price = c(11.14478, 11.1467,
11.14505, 11.14502, 11.1467, 11.1467), Bid.volume = c(4.5393967628479,
1.27781200408936, 0.0503959991037846, 0.226504996418953, 0.3228560090065,
0.405654013156891), Ask.volume = c(1.89141595363617, 3.06675004959106,
0.0503959991037846, 0.543613016605377, 0.774855017662048, 0.973568975925446
)), .Names = c("Timestamp", "Bid.price", "Ask.price", "Bid.volume",
"Ask.volume"), row.names = c(NA, 6L), class = "data.frame")
因为Timestamp
在整数秒和小数秒之间有一个:
,并且没有时间解析字符串("conversion specification",例如%Y
)没有整体的秒数,您需要将最后一个 :
更改为 .
,以便您可以用 %OS
解析它。 sub
可以解决,找
- 一个冒号
:
- 后跟 3 位数字
\d{3}
,捕获 (...)
- 后跟行尾
$
,
并将其替换为
- 一期
.
- 随后是捕获组。
此外,如果您想查看 正在解析的小数秒,您需要设置digits.secs
选项:
options(digits.secs = 3)
strptime(sub(':(\d{3})$', '.\1', fx$Timestamp), '%Y%m%d %H:%M:%OS')
# [1] "2007-03-13 07:01:04.762 EDT" "2007-03-13 07:01:07.608 EDT" "2007-03-13 07:01:08.700 EDT"
# [4] "2007-03-13 07:01:11.275 EDT" "2007-03-13 07:01:13.884 EDT" "2007-03-13 07:01:16.588 EDT"
请注意,strptime
会插入本地时区(目前对我来说是 EDT
),但您可以将其设置为您喜欢的任何内容(或您的数据应该使用的任何内容) tz
参数。
我已阅读有关此主题的其他问题,但它们似乎不适用于我的数据集:
Timestamp Bid.price Ask.price Bid.volume Ask.volume
20070313 07:01:04:762 11.14122 11.14478 4.539397 1.891416
20070313 07:01:07:608 11.13930 11.14670 1.277812 3.066750
20070313 07:01:08:701 11.14095 11.14505 0.050396 0.050396
20070313 07:01:11:275 11.14098 11.14502 0.226505 0.543613
20070313 07:01:13:884 11.13930 11.14670 0.322856 0.774855
20070313 07:01:16:588 11.13930 11.14670 0.405654 0.973569
我试过:
as.POSIXct(fx[,1], format="%y%m%d %H:%M:%S:%OS3")
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S:%OS3")
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S")
但我得到的只是 NA
s ...
我该如何解决这个问题?
这是数据集:
fx <- structure(list(Timestamp = c("20070313 07:01:04:762", "20070313 07:01:07:608",
"20070313 07:01:08:701", "20070313 07:01:11:275", "20070313 07:01:13:884",
"20070313 07:01:16:588"), Bid.price = c(11.14122, 11.1393, 11.14095,
11.14098, 11.1393, 11.1393), Ask.price = c(11.14478, 11.1467,
11.14505, 11.14502, 11.1467, 11.1467), Bid.volume = c(4.5393967628479,
1.27781200408936, 0.0503959991037846, 0.226504996418953, 0.3228560090065,
0.405654013156891), Ask.volume = c(1.89141595363617, 3.06675004959106,
0.0503959991037846, 0.543613016605377, 0.774855017662048, 0.973568975925446
)), .Names = c("Timestamp", "Bid.price", "Ask.price", "Bid.volume",
"Ask.volume"), row.names = c(NA, 6L), class = "data.frame")
因为Timestamp
在整数秒和小数秒之间有一个:
,并且没有时间解析字符串("conversion specification",例如%Y
)没有整体的秒数,您需要将最后一个 :
更改为 .
,以便您可以用 %OS
解析它。 sub
可以解决,找
- 一个冒号
:
- 后跟 3 位数字
\d{3}
,捕获(...)
- 后跟行尾
$
,
并将其替换为
- 一期
.
- 随后是捕获组。
此外,如果您想查看 正在解析的小数秒,您需要设置digits.secs
选项:
options(digits.secs = 3)
strptime(sub(':(\d{3})$', '.\1', fx$Timestamp), '%Y%m%d %H:%M:%OS')
# [1] "2007-03-13 07:01:04.762 EDT" "2007-03-13 07:01:07.608 EDT" "2007-03-13 07:01:08.700 EDT"
# [4] "2007-03-13 07:01:11.275 EDT" "2007-03-13 07:01:13.884 EDT" "2007-03-13 07:01:16.588 EDT"
请注意,strptime
会插入本地时区(目前对我来说是 EDT
),但您可以将其设置为您喜欢的任何内容(或您的数据应该使用的任何内容) tz
参数。