在日期上进行子集设置R中的功能
问题描述:
我想在R中创建一个解决以下问题的函数。我有一个返回样本(称这个向量为x
),每一个都有相应的日期(称这个向量为y
)。由于我们有回报,日期向量y
只有“交易日”(即从周一到周五)。我想创建一个执行以下操作的函数:在日期上进行子集设置R中的功能
函数有两个输入:日期和整数(正数)。
R在日期向量
y
中搜索用户输入的日期。说出用户输入的整数是
m
;m > 0
。现在,R取得指定的日期和m
日期之前。 (如果m < 0
,R必须告诉你,有一个错误。)[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%
我知道这是相当具体,但它会教我很多关于子集。 (我还没有找到类似的东西。)
答
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
)。
习惯于尝试自己处理问题,然后发布可重现的代码和数据,如果遇到问题http://*.com/questions/5963269/how-to-make-a-great- r-reproducible-example –
我明白了。我对R很新,所以我只知道非常基础。对于从哪里开始解决这个问题,我没有丝毫的线索。我在R中搜索了几个有关子集的网页,但没有一个有帮助。我非常抱歉,我试着写一个很好的例子。尽管如此,感谢提醒,我会在发布其他内容时考虑到这一点。 –
够公平的。我刺杀了它。 HTH –