2014-11-14 65 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()]) 

更新一些改進。