我试图计算特定日期之间的天数。 我有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
请帮助我!!!
答案 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))