将非标准字符串日期转换为R中的日期对象

时间:2016-11-30 03:12:03

标签: r date

我有一个包含V8列的数据框,该列由此格式的字符串值组成 -

as.Date

这些项目是日期,第一个代表2016年7月份,第二个代表2011年2月,最后一个代表2012年5月。有时会有初始零,有时则没有。

我想使用strptime方法在R中表示这些日期,但我知道这种表示是非标准和模糊的。

我打算以编程方式将CSV文件中的值转换为strptime("09/12", format="%m/%y")可以理解的表示形式,但令我印象深刻的是,这必然是一个常见问题,因此可能会涉及到更多惯用解决方案。我找到了NA函数,但我不清楚如何使用它,尝试foreach (var item in class1.ItemSource) { Console.WriteLine(((TempClass)item).A); } 但它返回public class TempClass { int a; public int A { set { a = value; } get { return a; } } public TempClass() { } public TempClass(int t) { A = t; } public override string ToString() { return A.ToString(); } }

如何将这些非标准字符串值转换为Date对象?

3 个答案:

答案 0 :(得分:3)

一种选择是使用as.Date()并假设您的每个月都发生在该月的第一天:

> strDates <- c("07/16", "02/11", "05/12")
> dates <- as.Date(paste0("01/", strDates), "%d/%m/%y")
> dates
[1] "2016-07-01" "2011-02-01" "2012-05-01"

答案 1 :(得分:3)

一个可能的解决方法是使用zoo包中的as.yearmon()

> as.yearmon("09/12", format ="%m/%y")
[1] "Sep 2012"

唯一的缺点是你没有获得“Date”对象,而是得到一个“yearmon”对象。

答案 2 :(得分:1)

lubridate包可能对此有用:

library(lubridate)
strDates <- c("07/16", "02/11", "05/12")
as.Date(parse_date_time(strDates, orders="%m/%y"))
[1] "2016-07-01" "2011-02-01" "2012-05-01"