【问题标题】:Data frame of departure and return dates, how do I get a list of all dates away?出发和返回日期的数据框,我如何获得所有日期的列表?
【发布时间】:2014-02-14 16:08:34
【问题描述】:

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

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

对不起,如果这很简单(我仍在学习用 r 思考),并且对任何违反礼仪的行为感到抱歉。谢谢。

【问题讨论】:

  • 也许应用功能可以帮助您将所有内容转换为日期并从那里提取列表

标签: r date seq


【解决方案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 放在单独的列表中,这很简单,尽管将它作为数据框的附加列似乎更有用。

【讨论】:

  • 谢谢。但我很抱歉我不清楚。我正在寻找一个人离开的每一天的日期,而不仅仅是天数。这就是我尝试使用 seq() 的原因。我项目的第二步是计算一年中大多数人离开办公室的日子。也感谢您向我介绍了 transform()。
  • @user3307442,见编辑。我认为这解决了您的担忧。
  • 谢谢!它很有魅力!我很感激。我学到了很多。
猜你喜欢
  • 2012-10-05
  • 2018-06-17
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多