Другая оптимизация: если я правильно прочитал ваш код, вы можете легко вычислить вектор nLost, используя:
nLost <-cumsum(dDelay$typeid==1)
вне цикла. Тот, который вы можете просто добавить к кадру данных в конце. Экономит много времени уже. Если я использую ваш фрейм данных, то:
> nLost <-cumsum(dd$typeid==1)
> nLost
[1] 1 1 2 2 3 3 4 4 5 5
Аналогично, время, в которое пакеты были потеряны, может быть рассчитано как:
> dd$timeid[which(dd$typeid==1)]
[1] 18,00035 18,02035 18,04035 18,06035 18,08035
на случай, если вы захотите сообщить о них где-нибудь тоже.
Для тестирования я использовал:
dd <- structure(list(timeid = structure(1:10, .Label = c("18,00035",
"18,00528", "18,02035", "18,02116", "18,04035", "18,04116", "18,06035",
"18,06116", "18,08035", "18,08116"), class = "factor"), valid = structure(c(3L,
2L, 4L, 1L, 5L, 1L, 6L, 1L, 7L, 1L), .Label = c("0,00081", "0,00493",
"1,00000", "2,00000", "3,00000", "4,00000", "5,00000"), class = "factor"),
typeid = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L)), .Names = c("timeid",
"valid", "typeid"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))