【问题标题】:Convert column to date-format with a space and milliseconds将列转换为带有空格和毫秒的日期格式
【发布时间】:2014-08-15 11:41:33
【问题描述】:

我这几天一直在尝试解决这个问题,似乎在 R 中进行简单的日期列转换时遇到了困难。

我需要先格式化日期和时间,然后才能使用 to.period 命令。我想格式化 mydata$Time 列,并将整个系列转换为 4 小时 OHLC 条。

下面是代码输入;

> mydata = read.csv("AUDJPY.csv")
> colnames(mydata) <- c("Pair","Time","Bid","Ask")
> head(mydata)
     Pair                  Time    Bid    Ask
1 AUD/JPY 20140501 00:00:00.301 94.874 94.893
2 AUD/JPY 20140501 00:00:00.312 94.876 94.895
3 AUD/JPY 20140501 00:00:00.316 94.876 94.882
4 AUD/JPY 20140501 00:00:00.317 94.877 94.884
5 AUD/JPY 20140501 00:00:00.403 94.877 94.885
6 AUD/JPY 20140501 00:00:00.420 94.877 94.887
> mydata$Time <- strptime(as.character(mydata$Time),"%Y%m%d_%H:%M:%S.%f")
> head(mydata)
     Pair Time    Bid    Ask
1 AUD/JPY <NA> 94.874 94.893
2 AUD/JPY <NA> 94.876 94.895
3 AUD/JPY <NA> 94.876 94.882
4 AUD/JPY <NA> 94.877 94.884
5 AUD/JPY <NA> 94.877 94.885
6 AUD/JPY <NA> 94.877 94.887
> class(mydata$Time)
[1] "POSIXlt" "POSIXt" 
> 

请帮忙!

【问题讨论】:

    标签: r quantmod strptime posixlt


    【解决方案1】:

    对于带小数的秒,您希望使用“%OS”而不是“%S”。后者忽略了所有的值。如果你的格式有空格,你可以在格式字符串中包含一个空格。

    观察

    x<-c("20140501 00:00:00.301","20140501 00:00:00.420")
    
    a<-strptime(x,"%Y%m%d %H:%M:%OS");
    a
    # [1] "2014-05-01 00:00:00 EDT" "2014-05-01 00:00:00 EDT"
    a$sec
    # [1] 0.301 0.420
    

    虽然 R 在显示日期类的值时默认不显示小数默认值,但您可以看到它们存储在对象本身中。

    【讨论】:

    • 我正在尝试格式化整个列,因为该列中有数百万行,以下是我的结果; > mydata = read.csv("AUDJPY.csv") > colnames(mydata) x a head(mydata) 对时间买入卖出 1 AUD/JPY 20140501 00:00:00.301 94.874 94.893 2 AUD/ JPY 20140501 00:00:00.312 94.876 94.895 3 AUD/JPY 20140501 00:00:00.316 94.876 94.882 > head(a) [1] NA > head(mydata[2]) 时间 1 20140501 00:00:00.301
    • 你为什么要x&lt;-c('mydata[2]')??就做a&lt;-strptime(as.character(mydata$Time),"%Y%m%d %H:%M:%OS")
    猜你喜欢
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多