3

提前感谢您的帮助。我正在使用 quantmod 包中的 getQuote 函数,它返回以下数据框:

在此处输入图像描述

有没有办法修改第一列中的所有日期以排除时间戳,同时保留数据框结构?我只想要第一列中的“YYYY-MM-DD”。我知道如果它是日期向量,我会使用 substr(df[,1],1,10)。我还研究了 apply 函数:apply(df[,1],1,substr,1,10)。

4

5 回答 5

4

另一个尚未提及的选项:

tt <- getQuote("AAPL")
trunc(tt[,1], units='days')

这将返回 中的日期POSIXltas.POSIXct如果你愿意,你可以把它包起来。

于 2013-01-16T21:25:52.917 回答
2

使用?strptime

tt <- getQuote("AAPL")
tt[,1]
[1] "2013-01-16 02:52:00 CET"
as.POSIXct(strptime(tt[,1],format ='%Y-%m-%d')) ## as.POSIXct because strptime returns POSIXlt
[1] "2013-01-16 CET"

编辑

您可以使用 POSIXct 的格式参数,但您需要先将 tt[,1] 转换为字符。

as.POSIXct(as.character(tt[,1]),format ='%Y-%m-%d')
[1] "2013-01-16 CET"
于 2013-01-16T20:08:29.013 回答
2

我会这样做lubridate

library(plyr)
library(lubridate)

tickers <- c("AAPL","AAJX","ABR")
df <- ldply(tickers, getQuote)
rownames(df) <- tickers

df[,"Trade Time"] <- paste(year(df[,"Trade Time"]),month(df[,"Trade Time"]),day(df[,"Trade Time"]),sep="-")

打印日期可能有一种更优雅的方式,但这是我首先想到的。

于 2013-01-16T20:15:06.200 回答
0

您可以只使用 gsub。无需转换数据类型。

tt <- getQuote("AAPL")
tt[, 'Trade Time']<- gsub(" [0-9]{2}:[0-9]{2}:[0-9]{2}", "", tt[, 'Trade Time'])
于 2013-01-17T01:00:01.933 回答
0

它可以很简单:

tt[,1]=as.Date(tt[,1])

(其中 tt 是tt <- getQuote("AAPL"),如替代答案所示)

逗号前的空格表示“执行所有行”,逗号后的 1 表示“对(仅)第一列进行操作”。

我更喜欢这个解决方案,因为它为您提供了一个 Date 对象,如果您试图剥离时间戳,它必须正是您想要的。

agstudy 的回答给你一个带有 timezone的日期,当你第一次在不同的时区运行你的脚本时,这会咬你。(顺便说一句:由于我的测试代码中有一个微妙的时区假设,我在圣诞节期间在英国运行单元测试套件时遇到了一些回归。)

于 2013-01-17T09:19:23.180 回答