【问题标题】:Find number of days between two given dates in Rcpp在 Rcpp 中查找两个给定日期之间的天数
【发布时间】:2018-08-28 07:44:49
【问题描述】:

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

2016-04-19 00:01:00

包含日期值的数据框字段名称是“日期”。所以,我得到 2 个向量:

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

问题:

1) 我不能区分 Date 的 2 个 Date 值(我不知道为什么,但是 gcc-4.9.3 给了我这样的差异错误:

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

错误:'operator-' 的重载不明确(操作数类型为 'Rcpp::traits::storage_type::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 秒)方面有所不同。

谢谢。谁能帮我解决这些问题?

【问题讨论】:

    标签: date datetime rcpp rcpp11


    【解决方案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 包具有日期和日期时间的功能...

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多