R:查找时间数据中的第一个和最后一个日期

时间:2013-07-10 14:24:43

标签: r

我有一个包含日期的数据框,我需要查找不包括年份的第一个和最后一个日期。 我的日期有一部分:

2003-09-27
2004-09-17
2005-09-23
2006-09-21
2007-09-20
2008-09-26
2009-10-11
2010-09-28
2011-09-01

为了确保用英语翻译我想要的东西,我会将其置于问题形式。

那会像这样回答这个问题: - 在所有这些调查中,您的开始哪一年的计数越早? - 那是2004年的09-17。

我怎么能找到这个日期?

感谢您的帮助!

修改 我尝试自动查找哪个日期是我所有调查的早期日期。这些日期是计算天数,我需要找出计数会议最早开始的那一年。我不是在寻找最广泛的范围。我想我需要摆脱这一年才能找到这个。我似乎无法将年份分开并保留日期格式,因为当我打印“月 - 日”部分时,它会自动添加2013.

我的问题的第二部分是:当找到这个日期时,我怎样才能在整个数据框中调用整个日期(以年为单位)?

我希望现在更清楚了!

3 个答案:

答案 0 :(得分:5)

使用提供的数据,这应该确定2011年9月1日是最早的日期(而不是2004年9月17日)。

dates <- c("2003-09-27", "2004-09-17", "2005-09-23", "2006-09-21", 
           "2007-09-20", "2008-09-26", "2009-10-11", "2010-09-28", 
           "2011-09-01")

dates[order(format(as.Date(dates),"%m%d"))[1]]
#[1] "2011-09-01"
# it works!

答案 1 :(得分:3)

只需使用range,无需转换为日期:

dates <- c("2003-09-15", "2002-04-04", "2002-11-17", "2005-09-23", 
           "2013-03-03", "2005-08-04", "2011-05-05", "2013-08-08", "2013-01-04")

# Find which years we have
years <- strftime(dates, "%Y")

res <- sapply(unique(years), function(y){
      # Find which days are in the specific year we're looking at
      idx <- which(years==y); 
      # Return the range
      return(range(dates[idx]));
      })

> res
     2003         2002         2005         2013         2011        
[1,] "2003-09-15" "2002-04-04" "2005-08-04" "2013-01-04" "2011-05-05"
[2,] "2003-09-15" "2002-11-17" "2005-09-23" "2013-08-08" "2011-05-05"

答案 2 :(得分:-1)

dates <- structure(c(12322, 12678, 13049, 13412, 13776, 14148, 14528, 
                 14880, 15218), class = "Date")

md <- (as.numeric(format(dates, "%m%d")))
dates[c(which.min(md), which.max(md))]