提取数据框列中日期的一部分

时间:2013-01-16 19:55:27

标签: r quantmod posixct

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

enter image description here

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

5 个答案:

答案 0 :(得分:4)

尚未提及的另一个选项:

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

这将返回POSIXlt中的日期。如果需要,您可以将其包装在as.POSIXct中。

答案 1 :(得分: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的format参数,但需要将tt [,1]转换为之前的字符。

as.POSIXct(as.character(tt[,1]),format ='%Y-%m-%d')
[1] "2013-01-16 CET"

答案 2 :(得分: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="-")

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

答案 3 :(得分:0)

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

tt <- getQuote("AAPL")
tt[, 'Trade Time']<- gsub(" [0-9]{2}:[0-9]{2}:[0-9]{2}", "", tt[, 'Trade Time'])

答案 4 :(得分:0)

可以这么简单:

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

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

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

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

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