【发布时间】:2017-01-20 09:40:52
【问题描述】:
我在使用 R 中的 as.Date 函数时遇到了一些问题。我有一个日期向量,我正在从一个 .csv 文件中读取该日期向量,这些日期作为整数或字符的因子传入(取决于关于我如何读取文件,但这似乎与问题无关),格式为%m/%d/%Y。
我正在逐行浏览文件,提取日期字段并尝试使用以下代码将其转换为在其他地方使用:
tmpDtm <- as.Date(as.character(tempDF$myDate), "%m/%d/%Y")
这似乎给了我想要的东西,例如,如果我对 2014 年 12 月 30 日的起始值执行此操作,我会返回值 "2014-12-30"。但是,如果我使用typeof() 检查这个值,R 会告诉我它的数据类型是“double”。此外,如果我尝试将其绑定到其他值并使用 c() 或 cbind() 将其存储在数据框中,在数据框中,它最终会存储为 16434,这在我看来就像某种不同的内部日期的存储值。我很确定它也是如此,因为如果我尝试使用 as.Date() 再次转换该值,它会抛出一个询问来源的错误。
那么,有两个问题:这符合预期吗?如果是这样,是否有更合适的方法来转换日期,以便我最终得到一个日期类型的对象?
谢谢
【问题讨论】:
-
请做一个可重现的例子。您
c()或cbind()它的数据类型是什么?您知道向量的所有条目都必须属于同一类型吗? -
我知道这一点。我很抱歉不清楚,但在我尝试绑定之前数据类型是 double (即上面的 tmpDtm 对象是 type: double )。绑定问题对我来说不太重要 - 如果我可以确保在绑定之前有一个日期对象,我可以弄清楚如何以我需要的方式将它绑定到其他数据 - 我只是认为额外的信息可能会有所帮助在我进行绑定之前确定转换发生了什么。
-
我个人不知道这两个函数之间的细微差别,但是尝试
class而不是typeof。前者似乎返回Date,而后者返回double。 -
下面的答案不完整。这个问题应该迁移到 Stack Overflow。那里有很多解释。包括,为什么
c()和cbind()强制这个值?整数日期究竟代表什么?typeof和class有什么区别?是否还有其他不受此强制的日期对象? -
帮助(日期)说
Dates are represented as the number of days since 1970-01-01, with negative values for earlier dates.
标签: r date date-arithmetic