我应该如何处理'来自'必须是长度1错误?

时间:2017-09-12 08:27:53

标签: r date seq

我试图计算特定日期之间的天数。 我有2列所有字符向量。

sp.da1<-ymd("2015-04-11")

具体日期为2015-04-11至2015-07-10。 所以我使用seq()创建了特定日期之间的所有日期。     sp.da2<-ymd("2015-07-10")     inteval.da<-seq(sp.da1, sp.da2, by = 'day')     List<User> findAll(); 我想知道具体日期之间有多少天。 我尝试使用seq(start.date,end.date,by =&#39; day&#39;),如上所述,但我收到此错误:&#39;来自&#39;必须长度为1

请帮助我!!!

2 个答案:

答案 0 :(得分:2)

您在询问主时间间隔内给定时间间隔的天数。

让我们首先设置三个不同的时间间隔。然后我们编写一个函数,检查每天x是否在主间隔内部或外部。如果我们总结主要区间内的天数,我们将会找到您要搜索的内容:

date10$start.date <- as.Date.character(date10$start.date, format="%Y-%m-%d")
date10$end.date   <- as.Date.character(date10$end.date,   format="%Y-%m-%d")

your_intervals <- Map(seq, from = date10[, 1], to = date10[, 2], by = "days")

your_intervals是一个包含三个数据框的列表,每个数据框都包含间隔中的每一天。

is_in_interval <- function(x, l_bound = sp.da1, u_bound = sp.da2){
  return (x > l_bound) & (x < u_bound)
}

sapply(your_intervals, function(x) sum(is_in_interval(x)))
# [1] 0 0 63

答案 1 :(得分:0)

首先:为什么不包含Date类的start.date和end.date列?如果您将这些列存储为日期,那么当您想要使用它们时,您不必转换它们。在您的示例代码中,您将字符串传递给seq()函数,该函数不能很好地工作。

以下代码应该为您提供数据框中每一行的日期序列:

apply(date10, 1, function(x) seq(ymd(x['start.date']), ymd(x['end.date']), 'day'))

这段代码的作用是将数据帧按行分割并逐一考虑。这意味着您每次都将一个开始日期和一个结束日期传递给seq函数,而不是每个函数的整列。这就是造成你错误的原因。

如果你想知道两者之间的天数,我会建议这个解决方案:

date10$diff <- ymd(date10$end.date) - ymd(date10$start.date)

这会创建一个&#39; difftime&#39;类。您可以通过添加as.integer()

将其转换为简单整数
date10$diff <- as.integer(ymd(date10$end.date) - ymd(date10$start.date))