【问题标题】:strptime() behaving differently in an anonymous function than I expectedstrptime() 在匿名函数中的行为与我预期的不同
【发布时间】:2016-01-12 03:50:20
【问题描述】:

我有一个 xts 列表对象,我试图将列表中存在的日期放入一个向量中,以便稍后在进一步处理中用作 xts 索引。尽管我的数据包含时间戳,但出于此说明的目的,我从谷歌提取了 YHOO 数据。此数据没有仅时间戳日期的时间元素,但已经足够了。你需要quantmod。我拉取数据,然后使用以下代码创建一个列表,将 YHOO 划分为每周的子组件:

library(quantmod)
library(xts)

getSymbols("YHOO",src="google")
yhooL <- split.xts(YHOO,"weeks")

要从第一段 yhooL 中获取日期,我通过以下代码:

strptime(index(yhooL[[1]][1]),format="%Y-%m-%d")

它按预期工作,我得到了我的约会。但是要使用vapply strptime() 从每周的第一行获取所有日期,将返回其所有 11 个元素 $sec、$min...days、一年中的一周。它没有以我提供的格式给我日期。我想要实现的是以该特定格式从第一行返回日期。我不确定将什么值传递给vapply() 的参数 FUN.VALUE

vapply(yhooL, function(i) {strptime(index(i[1,]), format ="%Y-%m-%d")},double(1))

我还尝试了POSIXct(1)FUN.VALUE 和其他一堆,真的是没有运气的猜测。

【问题讨论】:

  • 你可以试试 as.Date() 吗?
  • 为了 FUN.VALUE?如果这就是你的意思,因为错误正在发生,因为 strptime() 正在返回 11 个元素,而函数期望 1。那是 11 per (i) 而不是 1 per (i)。
  • strptime 将字符串转换为 POSIXlt 对象。 index 返回一个基于时间的对象。所以,不清楚你为什么需要strptime
  • 我正在尝试从时间戳中获取日期组件。我的索引由日期和时间组成,我试图只获取日期。或每个日期的第一秒(午夜)。
  • 当我加载上述数据时,索引只是一个日期字段,属于日期类。您是否有其他运行方式会产生时间戳?

标签: r xts quantmod strptime


【解决方案1】:

这是因为strptime 返回一个POSIXlt 对象,这非常复杂。您最好使用lapply 来挑选索引,然后使用 do.call 将它们组合起来。你也可以通过这种方式设置最终对象的类,例如使用as.Date

x <- do.call(c,lapply(yhooL, function(i) as.Date(index(i)[1])))
summary(x)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2007-01-03" "2009-04-02" "2011-07-05" "2011-07-04" "2013-10-03" "2016-01-04" 
class(x)
[1] "Date"

【讨论】:

  • 他们的数据不是每天的,所以你需要提取第一个元素,正如他们在问题中显示的那样:do.call(c, lapply(yhooL, function(i) as.Date(index(i)[1])))
猜你喜欢
  • 1970-01-01
  • 2023-02-04
  • 2019-08-21
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2016-09-04
  • 2016-01-01
  • 2015-07-18
相关资源
最近更新 更多