感谢您的帮助。我正在使用quantmod包中的getQuote函数,该函数返回以下数据框:
有没有办法修改第一列中的所有日期以排除时间戳,同时保留数据框架结构?我只想在第一栏中找到“YYYY-MM-DD”。我知道如果它是日期的向量,我会使用substr(df [,1],1,10)。我还查看了apply函数,其中:apply(df [,1],1,substr,1,10)。
答案 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的答案会给你一个带有时区的日期,这会在你第一次在不同的时区运行你的脚本时咬你。 (旁白:由于我的测试代码中有一个微妙的时区假设,当我在圣诞节期间在英国运行时,我在单元测试套件中得到了一些回归。)