出发和返回日期的数据框,如何获取所有日期的列表?

时间:2014-02-14 16:08:34

标签: r date seq

我在计算旅行日期时遇到了问题。我有一个出发日期和返回日期的数据框。

Departure  Return
1    7/6/13  8/3/13
2    7/6/13  8/3/13
3   6/28/13  8/7/13

我想创建并传递一个函数,该函数将采用这些日期并形成所有日子的列表。我可以通过将每列转换为日期来单独执行此操作。

## Turn the departure and return dates into a readable format
Dept <- as.Date(travelDates$Dept, format = "%m/%d/%y")
Retn <- as.Date(travelDates$Retn, format = "%m/%d/%y")
travel_dates <- na.omit(data.frame(dept_dates,retn_dates))

seq(from = travel_dates[1,1], to = travel_dates[1,2], by = 1)

这给了我[1] "2013-07-06" "2013-07-07" ......等等。我想缩放以覆盖整个数据框,但我的尝试失败了。

这是我认为可行的。

days_abroad <- data.frame()
get_days <- function(x,y){
  all_days <- seq(from = x, to = y, by =1)
  c(days_abroad, all_days)
  return(days_abroad)
}
get_days(travel_dates$dept_dates, travel_dates$retn_dates)

我收到此错误:

Error in seq.Date(from = x, to = y, by = 1) : 'from' must be of length 1 

这可能有很多错误,但我真正想要帮助的是如何通过seq()运行多个日期。

对不起,如果这很简单(我还在学习思考)并且对于任何违反礼节的行为都抱歉。谢谢。

1 个答案:

答案 0 :(得分:1)

编辑:根据OP评论更新。

这个怎么样:

travel_dates[] <- lapply(travel_dates, as.Date, format="%m/%d/%y")
dts <- with(travel_dates, mapply(seq, Departure, Return, by="1 day"))

这将生成一个列表,其中包含与初始表中的行数一样多的项目。然后,您可以进行汇总(这将是data.frame,其中包含日期显示的次数):

data.frame(count=sort(table(Reduce(append, dts)), decreasing=T))

#            count
# 2013-07-06     3
# 2013-07-07     3
# 2013-07-08     3
# 2013-07-09     3
# ...

旧代码:

以下是每次旅行的#days,而不是带有日期的列表。

transform(travel_dates, days_away=Return - Departure + 1)

产生:

#    Departure     Return days_away
# 1 2013-07-06 2013-08-03   29 days
# 2 2013-07-06 2013-08-03   29 days
# 3 2013-06-28 2013-08-07   41 days

如果你想将days_away放在一个单独的列表中,这是微不足道的,尽管将它作为数据框的附加列似乎更有用。