2016-06-09 36 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)。

相关问题