2016-06-09 55 views
1

我想在R中創建一個解決以下問題的函數。我有一個返回樣本(稱這個向量爲x),每一個都有相應的日期(稱這個向量爲y)。由於我們有回報,日期向量y只有「交易日」(即從週一到週五)。我想創建一個執行以下操作的函數:在日期上進行子集設置R中的功能

函數有兩個輸入:日期和整數(正數)。

  1. R在日期向量y中搜索用戶輸入的日期。

  2. 說出用戶輸入的整數是m; m > 0。現在,R取得指定的日期和m日期之前。 (如果m < 0,R必須告訴你,有一個錯誤。)

  3. [R子集基於m日期矢量y並返回矢量x

爲了舉例說明,假設我有"%m/%d/%Y"格式的5個日期。現在

01/01/2016 -2% 
01/04/2016 +3% 
01/05/2016 +1% 
01/06/2016 -5% 
01/07/2016 +3% 

,如果我進入功能:f(01/06/2016, 2),然後我會留下:

01/05/2016 +1% 
01/06/2016 -5% 

我知道這是相當具體,但它會教我很多關於子集。 (我還沒有找到類似的東西。)

+0

習慣於嘗試自己處理問題,然後發佈可重現的代碼和數據,如果遇到問題http://stackoverflow.com/questions/5963269/how-to-make-a-great- r-reproducible-example –

+0

我明白了。我對R很新,所以我只知道非常基礎。對於從哪裏開始解決這個問題,我沒有絲毫的線索。我在R中搜索了幾個有關子集的網頁,但沒有一個有幫助。我非常抱歉,我試着寫一個很好的例子。儘管如此,感謝提醒,我會在發佈其他內容時考慮到這一點。 –

+0

夠公平的。我刺殺了它。 HTH –

回答

0
y <- c(Sys.Date(),Sys.Date()+2,Sys.Date()+1,Sys.Date()-1,Sys.Date()-2,Sys.Date()-3) 
x <- c(10,100,12,13,14,15) 
df <- data.frame(y,x) 

myfun <- function(d=d,m=0){ 
    # R searches in the date vector y for the date entered by the user. 
    # Say the integer entered by the user was m; m > 0. 
    # Now, R takes the specified date and m dates BEFORE that one. 
    # (If m < 0, R must tell you there's an error.) 
    if(m < 0){ 
    cat("I must tell you, there's an error!") #trycatch is better 
    } 
    d <- as.Date(d)-m 
    print(d) 
    df1 <- df[df$y < (d+1),] 
    return(df1) 
} 

myfun("2016-06-09", 0) 

[1] "2016-06-09" 
      y x 
1 2016-06-09 10 
4 2016-06-08 13 
5 2016-06-07 14 
6 2016-06-06 15 

這應該是訣竅。沒什麼太花哨。您必須確保以正確的格式輸入日期。

如果你想改善這一點,你可以使使用format或包lubridate接受任何日期格式的一些控制流邏輯和/或你可以處理與tryCatch錯誤(見?tryCatch)。