【问题标题】:Subsetting on dates, function in R日期子集,R中的函数
【发布时间】:2016-06-09 22:45:38
【问题描述】:

我想在 R 中创建一个函数来解决以下问题。我有一个返回样本(称为此向量x),每个都有相应的日期(称为此向量y)。由于我们有回报,日期向量y 只有“交易日”(即从星期一到星期五)。我想创建一个执行以下操作的函数:

该函数有两个输入:一个日期和一个整数(正数)。

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

  2. 假设用户输入的整数是mm > 0。现在,R 采用指定日期和m 日期之前的日期。 (如果m < 0,R 必须告诉你有错误。)

  3. R 根据m 和返回向量x 对日期向量y 进行子集化。

举个例子,假设我有 5 个"%m/%d/%Y" 格式的日期。

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%

我知道这是非常具体的,但它会教我很多关于子集的知识。 (我还没有找到类似的东西。)

【问题讨论】:

  • 习惯上尝试自己解决问题,然后在遇到问题时发布可重现的代码和数据stackoverflow.com/questions/5963269/…
  • 我明白了。我对 R 很陌生,所以我只知道非常基础的知识。我不知道从哪里开始解决这个问题。我搜索了几个关于 R 中子集的网页,但没有一个有用。很抱歉,我试着写一个很好的例子。不过,感谢您的提醒,我会在发布其他内容时考虑到这一点。
  • 很公平。我接受了它。 HTH

标签: r function date subset


【解决方案1】:
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)。

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2023-04-08
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多