I used character vectors (as I described in the earlier answer):
df <- data.frame(id, resting, time, act, stringsAsFactors=FALSE)
> df2 <- df[ unlist(mapply( rep, rownames(df), 1+(df$resting=="toolong"))) , ]
> df2[ df2$resting=="toolong" & !duplicated(df2) , "act"] <- "for"
> df2[ df2$resting=="toolong" & df2$act == "for" , "time"] <- 60
> df2[ df2$resting=="toolong" & df2$act == "l" , "time"] <- df2[ df2$resting=="toolong" & df2$act == "l" , "time"] - 60
> df2
id resting time act
1 1 f 23 f
2 1 toolong 60 for
2.1 1 toolong 85 l
3 1 t 34 f
4 1 f 16 d
5 2 f 17 d
6 2 toolong 60 for
6.1 2 toolong 74 l
7 2 t 67 f
8 3 f 89 d
9 3 toolong 60 for
9.1 3 toolong 63 l
10 3 t 12 d