我有一个包含日期的数据框,我需要查找不包括年份的第一个和最后一个日期。 我的日期有一部分:
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.
我的问题的第二部分是:当找到这个日期时,我怎样才能在整个数据框中调用整个日期(以年为单位)?
我希望现在更清楚了!
答案 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))]