我正在使用R来分析一些数据,我有这个数据集,我试图获取仅使用最新日期的数据的子集。我在做这件事时遇到了麻烦,我的一些日期有不同的格式。不一致的日期格式
ex。 10/01/00 10/01/00 10/20/2000 05/13/2000
我该如何获得这些全部相同的格式?
我正在使用R来分析一些数据,我有这个数据集,我试图获取仅使用最新日期的数据的子集。我在做这件事时遇到了麻烦,我的一些日期有不同的格式。不一致的日期格式
ex。 10/01/00 10/01/00 10/20/2000 05/13/2000
我该如何获得这些全部相同的格式?
你可以从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"
真棒,工作很棒!谢谢! – Keeper01 2014-11-15 16:46:34
如果他们都是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()])
更新一些改进。
我似乎记得“lubridate”包有日期格式猜测一些设施试试。如果只是两种不同的格式,首先修复“短小”然后转换就显得很简单。 – 2014-11-14 20:17:28
欢迎来到Stack Overflow!为了帮助调试问题,这将有助于查看输入以及输出的内容。 – Jonathan 2014-11-14 20:30:06