【发布时间】:2017-10-17 09:37:31
【问题描述】:
我有一个希望是直截了当的问题。我有一个类似于以下内容的xts 对象:
| MarketPrice |
----------------------------------------
2007-05-04 10:15:33.546 | 5.32 |
----------------------------------------
2007-05-04 10:16:42.100 | 5.31 |
----------------------------------------
2007-05-04 10:17:27.546 | NA |
----------------------------------------
2007-05-04 10:20:50.871 | 5.35 |
----------------------------------------
2007-05-04 10:21:38.652 | 5.37 |
基本上,我想在某个时间之前立即找到MarketPrice 索引,同时也省略NA 值。例如,假设我们从时间2007-05-04 10:20:50.871 开始,该时间在对象中的索引为 4。所以这意味着在此时间之前的市场价格是5.31,它在对象中的索引为 2。为了执行这个任务,我编写了一个类似于以下的函数:
MPFunction <- function(t,df){
ind <- t
while(t>1){
t=t-1
if ( (index(df[t]) != index(df[ind])) && !(is.na(df[t,"MarketPrice"]))) {
return(t)
}
}
}
这将执行任务,因为 IF 语句中的第一个条件检查以确保 xts 对象的索引中的时间不同,而第二个条件检查以确保没有 NA 值在MarketPrice 专栏。
但是,当我查看几天时,我现在遇到了一个问题。假设我现在有一个 xts 对象,如下所示:
| MarketPrice |
----------------------------------------
2007-05-03 16:59:58.921 | 5.32 |
----------------------------------------
2007-05-04 10:12:27.546 | NA |
----------------------------------------
2007-05-04 10:20:50.871 | 5.35 |
----------------------------------------
如果我从索引 3 开始(即当时 2007-05-04 10:20:50.871),那么如果我希望在此时间之前找到第一个在 MarketPrice 列中没有 NA 值的索引,它将去索引 1,即2007-05-03 16:59:58.921。然而问题是这是在不同的日子,我想确保我只在同一天提取MarketPrice 值的索引。
基本上,我想知道是否可以在 IF 语句中对上面的MPFunction 进行快速修改,这样我就可以避免找到前一天的 MarketPrice 指数。此外,我不希望每天拆分 xts 对象,因为如果我这样做会使事情变得相当复杂。
现在,我已经有了一些关于如何解决这个问题的想法(例如使用strptime 函数来检查日期等),但是这些都是耗时的方法,所以我希望找到一种方法。快得多,所以如果有人有任何想法,我将不胜感激。提前致谢。
【问题讨论】: