在 RCPP 中查找两个给定日期之间的天数



我是 rcpp 的新手,但我有一个与日期和时间相关的任务。 让我在我的 Rcpp 函数的数据帧中拥有市场数据。因此,日期字段的格式如下:

2016-04-19 00:01:00

包含日期值的数据帧字段名称为"日期"。所以,我得到 2 个向量:

DatetimeVector datetime = df["Date"];
DateVector pureDate = df["Date"];

问题:

1)我无法在日期的2个日期值之间取差异(我不知道为什么,但是gcc-4.9.3给了我这样的差异错误:

Date pureDay = pureDate[0];
auto tmp = pureDate[j+1] - pureDay;

错误:"运算符-"的重载不明确(操作数类型为 'Rcpp::traits::storage_type<14>::type {aka double}' 和 'Rcpp::D ate') auto tmp = tmpDate[j+1] - tmpTradeDay;

但是如果我使用这样的代码:

Date pureDay = pureDate[0];
auto tmp = pureDate[j+1] - pureDate[j];

效果很好。

2) 如何格式化DateDatetime对象的输出?to_string不会很好地格式化它 - 我给出这样的结果:1461176460.000000

3)我希望像Date(datetime[i])这样的语法会给我一个Date对象。但它不会。我知道pureDate[1] - pureDate[0]应该具有相同的Y-M-D值,但它们在序列滞后(60 秒)方面有所不同。

谁能帮我解决这些问题?

你似乎有点迷茫,这其中确实有很多问题。

问题1)将在下面给出一个简短的例子。

问题 2) 主要是关于格式的,您可能需要查看类文档和标题;DateDatetime都有一个format()方法,其工作原理就像用于日期(时间)格式的R等效或C库函数一样,传说中的strftime()

问题3)不清楚;我不确定你在问什么。也许下面问题 1) 的答案会有所帮助。

问题 1 的简单示例:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double question1(DateVector dv) {
double d = dv[1] - dv[0];
return d;
}
/*** R
set.seed(123)
datevector <- Sys.Date() + cumsum(runif(3)*30);
datevector
diff(datevector)
question1(datevector)
*/

及其结果:

R> Rcpp::sourceCpp("/tmp/datequestion.cpp")
R> set.seed(123)
R> datevector <- Sys.Date() + cumsum(runif(3)*30);
R> datevector
[1] "2018-03-28" "2018-04-21" "2018-05-03"
R> diff(datevector)
Time differences in days
[1] 23.6492 12.2693
R> question1(datevector)
[1] 23.6492
R> 

与R的答案相同。 您的代码仍然具有索引计算,有时会使编译器感到困惑。 使其更简单(即更多步骤)通常会有所帮助。

最后,也许可以看看一些 Rcpp 文档和示例。Rcpp示例包具有日期和日期时间的功能...

相关内容

  • 没有找到相关文章

最新更新