2014-02-14 28 views
2

我被困在计算旅行日期的问题上。我有一个出发日期和返回日期的数据框。出发日期和返回日期的数据框,如何获取所有日期的列表?

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()运行多个日期。

对不起,如果这很简单(我仍然在学习思考),对于任何违反礼仪的行为也很抱歉。谢谢。

+0

也许应用函数可以帮助您将所有内容转换为日期并从那里提取列表 – Llopis

回答

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 
# ... 

OLD CODE:

下得到每行#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在一个单独的列表,这是微不足道的,但它似乎更加有用把它作为一个额外的列到您的数据帧。

+0

谢谢。但我很抱歉,我不清楚。我正在寻找一个人离开的每一天的日期,而不仅仅是天数。这就是我试图使用seq()的原因。我的项目中的第二步是解决大部分人离开办公室的年份。还要感谢我介绍transform()。 – user3307442

+0

@ user3307442,请参阅编辑。我认为这解决了你的担忧。 – BrodieG

+0

谢谢!它的魅力!我非常感激。我学到了很多。 – user3307442

相关问题