5.4 补充资料

5.4.1 Excel and R

Excel是我们天天打交道的工具,但是R与Excel都有自己的时间系统,而且还不统一,在计算时会给我们带来误解。

Excle日期系统

下面就Excel和R中的差异做简单阐述。

5.4.1.1 差异

R中日期起始时间是1970-01-01,Excel中起始日期11(Windows)是1900-01-01,转化成数字两者相差25568。如下所示:

as.Date('1970-01-01')
#> [1] "1970-01-01"
as.Date(25568,origin='1900-01-01') # 1970-01-02
#> [1] "1970-01-02"
as.Date(25568,origin='1899-12-31') # 1970-01-01
#> [1] "1970-01-01"

Excel中1900-01-01代表数字1,但是R中1970-01-01代表0。这也是比较怪异的点,毕竟R一般都是从1开始。

as.numeric(as.Date('1970-01-01'))
#> [1] 0

这样导致: R日期2021-06-23转化成数字是18801, Excel中日期2021-06-23转化成数字是44370,两者相差25569

在用R读取Excel文件时,涉及到数字日期转化时需要注意其中差异。

5.4.1.2 Excel时间函数

ExcelPower Pivot中有一组DAX智能函数,如:

  • 基础函数

date,datediff,datevalue,edate,eomonth,quarter,TIMEVALUE等等

  • 智能函数

dateadd,DATESBETWEEN,DATESMTD,TOTALMTD,TOTALQTD,TOTALYTD等等

Excel中因为有了以上时间智能函数,用度量值在透视表中计算同环比变得简单。 假如熟悉DAX时间智能函数,在R中设计相关功能或实现时可以借鉴参考DAX函数的思路。比如在R中写自动化报表时,涉及到同环比计算时就可以按照这个模式设计。


  1. Excel中存在两套日期系统↩︎