I have this sample
    data <- structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L), .Label = c("a", "b"), class = "factor"), minTime = structure(c(1L, 
2L, 3L, 4L, 5L, 7L, 6L, 8L, 9L, 10L), .Label = c("2014-06-06 07:39:50", 
"2014-06-07 02:24:32", "2014-06-07 15:14:29", "2014-06-07 2:29", 
"2014-06-08 5:40", "2014-06-18 17:54:42", "2014-06-18 2:45", 
"2014-06-19 02:37:53", "2014-06-19 19:15", "2014-06-19 22:15"
), class = "factor"), maxTime = structure(c(1L, 3L, 4L, 2L, 5L, 
6L, 7L, 8L, 9L, 10L), .Label = c("2014-06-07 01:41:31", "2014-06-07 10:01", 
"2014-06-07 14:44:08", "2014-06-07 22:31:02", "2014-06-08 5:50", 
"2014-06-18 2:50", "2014-06-19 01:49:05", "2014-06-19 18:51:36", 
"2014-06-19 20:15", "2014-06-19 23:15"), class = "factor"), duration.minutes = c(NA, 
740L, 437L, 452L, NA, NA, 474L, 974L, 4062L, 353L), event = structure(c(1L, 
4L, 4L, 2L, 2L, 1L, 4L, 4L, 3L, 4L), .Label = c("enter", "exit", 
"stop", "trip"), class = "factor")), .Names = c("id", "minTime", 
"maxTime", "duration.minutes", "event"), class = "data.frame", row.names = c(NA, 
-10L))
I would like to merge the events "trips" if they are consecutive for each id.
Where the consecutives trips for the id a and b have been merged:
- maxTime was edited to have the full lenght of the trip
- duration.minutes was also edited.
For example, this output:
dput(output.wanted)
structure(list(id = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 2L), .Label = c("a", 
"b"), class = "factor"), minTime = structure(c(5L, 6L, 7L, 2L, 
1L, 3L, 4L), .Label = c("18.6.2014 17:54", "18.6.2014 2:45", 
"19.6.2014 19:15", "19.6.2014 22:15", "6.6.2014 7:39", "7.6.2014 2:24", 
"7.6.2014 2:29"), class = "factor"), maxTime = structure(c(5L, 
7L, 6L, 1L, 2L, 3L, 4L), .Label = c("18.6.2014 2:50", "19.6.2014 18:51", 
"19.6.2014 20:15", "19.6.2014 23:15", "7.6.2014 1:41", "7.6.2014 10:01", 
"7.6.2014 22:31"), class = "factor"), duration.minutes = c(NA, 
1177L, 452L, NA, 1448L, 4062L, 353L), event = structure(c(1L, 
4L, 2L, 1L, 4L, 3L, 4L), .Label = c("enter", "exit", "stop", 
"trip"), class = "factor")), .Names = c("id", "minTime", "maxTime", 
"duration.minutes", "event"), class = "data.frame", row.names = c(NA, 
-7L))
The point is that I am looking to merge all event (trip or stop) if they are consecutive for the same id. but if the stop or the trip is unique, it stays the same
I have been trying to do it with group_by and mutate but I am a bit lost...
--
I found the solution but there is still a minor issue with the events stops
Here is a sample:
> dput(total)
structure(list(Ship = c(205482000, 205482000, 205482000, 205482000, 
205482000, 205482000, 205482000, 205482000, 205482000, 205482000, 
205482000, 205482000), minTime = structure(c(1401570241, 1401969219, 
1401981860, 1402052108, 1402768362, 1402772602, 1402841443, 1402855773, 
1403056361, 1403278916, 1403290856, 1403367735), class = c("POSIXct", 
"POSIXt")), maxTime = structure(c(1401966639, 1401980399, 1402051849, 
1402056430, 1402772313, 1402839873, 1402852433, 1403052550, 1403276355, 
1403289496, 1403367596, 1403371285), class = c("POSIXct", "POSIXt"
)), duration.minutes = structure(c(6607, 186, 1166, NA, NA, 1121, 
183, 3280, 3667, 176, 1279, NA), class = "difftime", units = "mins"), 
    event = c("stop", "trip", "trip", "exit", "enter", "trip", 
    "trip", "stop", "stop", "trip", "trip", "exit"), dist.sailed = c(NA, 
    50254.2034817555, 349194.108518887, NA, NA, 347816.081064252, 
    50035.8859874946, NA, NA, 49982.687612038, 351978.737678528, 
    NA)), .Names = c("Ship", "minTime", "maxTime", "duration.minutes", 
"event", "dist.sailed"), class = "data.frame", row.names = c(4L, 
5L, 6L, 2L, 1L, 7L, 8L, 9L, 10L, 11L, 12L, 3L))
the following code is not producing the complete duration of the stop, but only NA:
 total <- total %>% 
    group_by(Ship) %>% 
    mutate(new_id = data.table::rleid(event)) %>% 
    group_by(event, new_id, Ship) %>% 
    mutate(duration.minutes = ifelse(event == 'trip', sum(duration.minutes), duration.minutes), maxTime = tail(maxTime, 1))%>% 
    mutate(duration.minutes = ifelse(event == 'stop', sum(duration.minutes), duration.minutes), maxTime = tail(maxTime, 1))%>% 
    mutate(dist.sailed = ifelse(event == 'trip', sum(dist.sailed), dist.sailed), dist.sailed = tail(dist.sailed, 1)) %>% 
    filter(!duplicated(duration.minutes)) %>% 
    select(-new_id)
I added     mutate(duration.minutes = ifelse(event == 'stop', sum(duration.minutes), duration.minutes), maxTime = tail(maxTime, 1))%>% to the code from @Sotos)
 
     
    