无法将序列日期编号转换为正确的日期

时间:2017-01-31 15:11:54

标签: r date

我在csv文件的数字列表中读到了。它包括731961,731962,731966,731967,731968等数字,它们应与2004-01-15,2004-01-16,2004-01-20,2004-01-21,2004-01-22对应。

但是,当我尝试转换R中的数字时,结果日期是错误的,例如as.Date(731961,origin="1900-01-01") --> "3904-01-17"

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

跟进评论,问题是日期来源不正确。你可以看到,如果你计算日期,看看它们有多远:

inDates <- c(731961,731962,731966,731967,731968)
correctDates <- as.Date(c("2004-01-15","2004-01-16","2004-01-20","2004-01-21","2004-01-22"))

wrongDates <- as.Date(inDates, origin = "1900-01-01")

difftime(wrongDates, correctDates, units = "days")

他们距离正确日期693,962天,表明原点不正确。将原点设置为0-01-01为@Haboryme建议关闭,但仍然关闭一天。我的猜测是要么存在闰日错误,要么序列号要求0年1月1日为1而不是0.我无法将原点设置为BCE日期(可能有一种方法,但是当我找到一个工作时,我抓住它)。所以,我从输入日期中减去一个,并设置原点

as.Date(inDates - 1, origin = "0000/01/01")

然而,这也暗示了另一种选择。如果你经常有这样的序列编号日期,并且原点发生变化,那么四处寻找原点就是后端的痛苦。但是,如果您知道某些日期,并且可以确认它们都使用相同的来源,则可以从每个新输入中减去上面的offBy以获取正确的日期(只要您使用相同的来源) )。

as.Date(inDates - as.numeric(offBy[1]), origin = "1900-01-01")

也给出了正确的日期。