2013-03-05 87 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

相關問題