r - 如何从分组数据和控制输出格式中的最后一个日期条目中减去第一个日期条目

时间:2015-11-22 16:52:57

标签: r dataframe dplyr

这个问题非常类似于另一个可以找到here的帖子中提出的问题。我正在尝试实现类似的东西:在组(事件)中减去最后一个日期的第一个日期。我正在使用此线程的答案中提供的dplyr包和代码。从上一个日期减去第一个日期,但它没有提供令人满意的结果;得到的时间差以数字显示,并且似乎没有区别不同的时间单位(例如,分钟和小时) - >前2个事件中的减法是正确的,但是在第3个事件中,它不应该是分钟。如何通过dplyr操作输出,以便得到的减法实际上是时差的正确反映?您可以在下面找到我的数据样本(仅限1组)和我使用的代码:

    df<- structure(list(time = structure(c(1428082860, 1428083340, 1428084840, 
1428086820, 1428086940, 1428087120, 1428087240, 1428087360, 1428087480, 
1428087720, 1428088800, 1428089160, 1428089580, 1428089700, 1428090120, 
1428090240, 1428090480, 1428090660, 1428090780, 1428090960, 1428091080, 
1428091200, 1428091500, 1428091620, 1428096060, 1428096420, 1428096540, 
1428096600, 1428097560, 1428097860, 1428100440, 1428100560, 1428100680, 
1428100740, 1428100860, 1428101040, 1428101160, 1428101400, 1428101520, 
1428101760, 1428101940, 1428102240, 1428102840, 1428103080, 1428103620, 
1428103980, 1428104100, 1428104160, 1428104340, 1428104520, 1428104700, 
1428108540, 1428108840, 1428108960, 1428110340, 1428110460, 1428110640
), class = c("POSIXct", "POSIXt"), tzone = ""), event = c(1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3)), .Names = c("time", 
"event"), class = "data.frame", row.names = c(NA, 57L))

  df1 <- df %>%                                                     
  group_by(event) %>%                                           
  summarize(first(time),last(time),difference = last(time)-first(time))

1 个答案:

答案 0 :(得分:3)

我们可以使用difftime并指定unit以便在同一unit中获得所有差异。

df %>% 
   group_by(event) %>% 
   summarise(First = first(time),
             Last = last(time) , 
             difference= difftime(last(time), first(time), unit='hour'))