2014-02-14 27 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

相關問題