使用csv文件的as.date()进行转换false

Met*_*tix 3 csv r date

我有一个带有日期和相应值的1gb csv文件.现在是日期是"未定义的格式" - 所以它们在Excel中作为数字显示如下:

DATE     FXVol.DKK.EUR,0.75,4  
38719        0.21825                
Run Code Online (Sandbox Code Playgroud)

我无法打开csv文件并将其更改为我喜欢的日期格式,因为我会以这种方式丢失数据.

如果我现在将数据导入R并转换日期:

as.Date( workingfilereturns[,1], format = "%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

它总是产生70年+ 2076年而不是2006年的日期.我真的不知道出了什么问题或如何解决这个问题.

Tim*_*sen 5

(注意:我在处理Excel数据时添加了关于R中某些怪癖的注释.您可能希望直接跳到底部的那个;首先是原始答案.)

根据您的样本数据,38719似乎是自1900年1月1日以来经过的天数.因此,您可以将此天数添加到1900年1月1日,以获得Date您想要的正确对象:

as.Date("1900-01-01") + workingfilereturns[,1]
Run Code Online (Sandbox Code Playgroud)

要么

as.Date("1900-01-01") + workingfilereturns$DATE
Run Code Online (Sandbox Code Playgroud)

例:

> as.Date("1900-01-01") + 38719
[1] "2006-01-04"
Run Code Online (Sandbox Code Playgroud)

更新:

正如@Roland正确指出的那样,您也可以as.Date.numeric在指定origin1900年1月1日时使用:

> as.Date.numeric(38719, origin="1900-01-01")
[1] "2006-01-04"
Run Code Online (Sandbox Code Playgroud)

错误警告:

正如提问者@Methamortix指出的那样,我的解决方案,即使用1900年1月1日作为起源,在R中产生了两天太晚的日期.这有两个原因:

  • 在R中,原点索引为0,即as.Date.numeric(0, origin="1900-01-01")1900年1月1日,在R中,但Excel从1开始计数,这意味着将Excel中的数字1格式化为日期将产生1900年1月1日. 这解释了为什么R是提前一天Excel.
  • (屏住呼吸)似乎Excel在1900年有一个错误,特别是Excel认为1900年2月29日实际发生了,即使1900年不是闰年(http://www.miniwebtool.com/leap-years -list /?start_year = 1850&end_year = 2020).因此,当处理大于1900年2月28日的日期时,R是Excel之前的第二天.


作为证据,请考虑以下代码:

> as.Date.numeric(57, origin="1900-01-01")
[1] "1900-02-27"
> as.Date.numeric(58, origin="1900-01-01")
[1] "1900-02-28"
> as.Date.numeric(59, origin="1900-01-01")
[1] "1900-03-01"
Run Code Online (Sandbox Code Playgroud)

换句话说,R as.Date()在2月29日被正确地跳过了.但是60在Excel格式的单元格中键入数字,格式为日期,它将在1900年2月29日返回.我的猜测是已经在某处报告过,可能是在Stack Overflow或其他地方,但是这个作为另一个参考点.

因此,回到最初的问题,当处理R中的Excel日期时,原点需要偏移2天,其中日期大于1900年2月28日(原始问题的情况).所以他应该按照以下方式使用他的日期数据框:

as.Date.numeric(workingfilereturns$DATE - 2, origin="1900-01-01")
Run Code Online (Sandbox Code Playgroud)

其中日期列已回滚两天,以与Excel中的值同步.

  • 有一个`as.Date.numeric`方法.如果这些是Excel日期,则文档中的示例非常相关. (4认同)