2014-11-14 72 views
2

我正在使用R来分析一些数据,我有这个数据集,我试图获取仅使用最新日期的数据的子集。我在做这件事时遇到了麻烦,我的一些日期有不同的格式。不一致的日期格式

ex。 10/01/00 10/01/00 10/20/2000 05/13/2000

我该如何获得这些全部相同的格式?

+1

我似乎记得“lubridate”包有日期格式猜测一些设施试试。如果只是两种不同的格式,首先修复“短小”然后转换就显得很简单。 – 2014-11-14 20:17:28

+0

欢迎来到Stack Overflow!为了帮助调试问题,这将有助于查看输入以及输出的内容。 – Jonathan 2014-11-14 20:30:06

回答

1

你可以从lubridate

x <- c("10/01/00", "10/01/00", "10/20/2000", "05/13/2000") 
library(lubridate) 
as.Date(x, guess_formats(x, "mdy")) 
# [1] "2000-10-01" "2000-10-01" "2000-10-20" "2000-05-13" 
+0

真棒,工作很棒!谢谢! – Keeper01 2014-11-15 16:46:34

0

如果他们都是2000或更高版本试试这个:

x <- c("10/01/00", "10/01/00", "10/20/2000", "05/13/2000") # test data 

xx <- as.Date(sub("/(..)$", "/20\\1", x)); xx 
## [1] "10/01/2000" "10/01/2000" "10/20/2000" "05/13/2000" 

如果目标是拿最近的日期,那么这将工作的日期是否是所有2000或更高版本提供的是没有日期超过100岁。假设我们已经运行了上述线路,如果所有的日期都是未来的,那么最近的日期必须在1900年,所以重复这个sub,但是用19而不是20,并且取最大值;否则,最大日期必须是20XX所以remvove日期在未来采取的剩下最大:

if (all(xx > Sys.Date()) max(as.Date(sub("/(..)$", "/19\\1", x))) 
else max(xx[xx <= Sys.Date()]) 

更新一些改进。