2013-03-05 61 views
4

要找到最接近的日期,我有:找到最接近的日期(但不是同一日期)中的R

closestDate <- function(searchDate, dateList, roundDown=FALSE) { 
       as.Date(sapply(as.Date(searchDate), function(x){ 
       dist <- abs(x - as.Date(dateList)) 
       closest <- dateList[which(min(dist) == dist)] 
       return(ifelse(roundDown, min(closest), max(closest))) 
       }), origin="1970-1-1") 
      } 

当:

> nonNAdays 
[1] "2011-08-15" "2011-08-18" "2011-08-19" 

我得到:

> closestDate('2011-08-15', nonNAdays) 
[1] "2011-08-15" 

我希望功能给我最近的日期,而不是日期本身。所以在这种情况下,“2011-08-18”。我怎样才能改变我的代码来获得这个? 谢谢。

+0

EricaO,如果你发现你的问题回答,那么请接受它通过选中的对勾做回答。 – Arun 2013-03-06 07:08:00

回答

3

只是删除的日期是距离DIST计算和选择操作等于:

closestDate <- function(searchDate, dateList, roundDown=FALSE) { 
      as.Date(sapply(as.Date(searchDate), function(x){ 
      dist <- abs(x - as.Date(dateList[dateList != searchDate])) 
      closest <- dateList[dateList != searchDate][which(min(dist) == dist)] 
      return(ifelse(roundDown, min(closest), max(closest))) 
      }), origin="1970-1-1") 
     } 
nonNAdays <- c("2011-08-15", "2011-08-18", "2011-08-19") 
    closestDate('2011-08-15', nonNAdays) 
#[1] "2011-08-18" 
+0

不应该''''searchDate'? – Arun 2013-03-05 23:03:54

+0

好的,去试试... – EricaO 2013-03-05 23:04:24

+0

With: closestDate < - function(searchDate,dateList,roundDown = FALSE)as.Date(sapply(asDate(searchDate),function(x){ dist < abs(x - as.Date(dateList [dateList!= searchDate])) 最接近< - dateList [其中(min(dist)== dist)] return(ifelse(roundDown,min(closest),max )) }),origin =“1970-1-1”) } – EricaO 2013-03-05 23:11:28