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

时间:2018-03-19 16:46:38

标签: date datetime rcpp rcpp11

我是Rcpp的新手,但我有一个与Date和Datetime相关的任务。 让我在我的Rcpp函数中的DataFrame中获取市场数据。因此,Date字段的格式如下:

  

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;
  

错误:'operator-'的模糊重载(操作数类型是   'Rcpp :: traits :: storage_type< 14> :: type {aka double}'和'Rcpp :: Date')   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秒)而不同。

Thnxs。任何人都可以帮我解决这些问题吗?

1 个答案:

答案 0 :(得分:1)

你似乎有点迷失,这个问题确实有很多问题。

问题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文档和示例。 RcppExamples包具有日期和日期时间功能......