将chr转换为数字

时间:2017-10-25 05:27:16

标签: r datetime floating-point

我正在尝试将chr转换为数字。我想兑换的号码是“20171023063155.557”。当我使用as.numeric函数时,它给了我20171023063155.559。我尝试了一些不同的方法,但无法正确转换。

非常感谢任何帮助。

as.POSIXct("20171023063155.557", format = "%Y%m%d%H%M%OS")
[1] "2017-10-23 06:31:55 PDT"
> as.POSIXct("20171023063155.557", format = "%Y%m%d%H%M%S")
[1] "2017-10-23 06:31:55 PDT"

2 个答案:

答案 0 :(得分:2)

您的字符串实际上似乎是一个时间戳。因此,我建议你这样对待它。这里的一个选择是使用as.POSIXct将其转换为日期:

x <- "20171023063155.557"
y <- as.POSIXct(x, format = "%Y%m%d%H%M%OS")

使用POSIXct对象,您现在可以轻松提取有关时间戳的信息,例如

weekdays(y, FALSE)
months(y, FALSE)
[1] "Monday"
[1] "October"

要验证毫秒精度信息实际上已存储在POSIXct对象中,我们可以调用format来检查:

format(y, "%Y-%m-%d %H:%M:%OS6")
[1] "2017-10-23 06:31:55.556999"

答案 1 :(得分:0)

问题是使用32位浮点数(类float)施加的“舍入”差异,并且默认的有效位数R被配置为打印:

x <- as.numeric("20171023063155.557")
x
# [1] 2.017102e+13
getOption("digits")
# 7
options(digits=22)
x
# [1] 20171023063155.55859375

所以只需更改digits选项,您就可以看到您的号码已正确转换(几乎;-) ...