2015-04-22 4 views
0

Прошу прощения, если это невероятно просто, поскольку я относительно новичок в R, но я некоторое время задерживался на этой проблеме и не могу найти ответ в результатах поиска в Интернете.Создать интервал времени шага

Я пытаюсь создать кадр данных с одним столбцом минутных интервалов времени и времени, основанных на временах из отдельного кадра данных («падает»).

> head(drops) 
    uid    tid    dtdep    dtpull nutm  eutm 
1 256 A69-1601-27561 2014-04-28 10:14:00 2014-04-28 11:21:00 1966514 329557.4 
2 257 A69-1303-54408 2014-04-28 10:22:00 2014-04-28 11:26:00 1966884 329507.1 
3 258 A69-1601-27331 2014-04-28 10:28:00 2014-04-28 11:37:00 1967184 329458.8 
4 259 A69-1303-31936 2014-04-28 10:38:00 2014-04-28 11:50:00 1968022 329896.8 
5 260 A69-1303-54408 2014-04-28 11:32:00 2014-04-28 12:40:00 1966883 329556.9 
6 261 A69-1601-27331 2014-04-28 11:45:00 2014-04-28 12:46:00 1967084 329459.0 

Я создал пустой фрейм данных для хранения моего вывода

> steptimes<-data.frame(matrix(NA,nrow=300,ncol=1)) 

И побежал следующий цикл, но она приносит только временные шаги для пятого ряда моих капель $ dtdep

>for(j in 1:5){ 
> steptimes[j]<-seq(from=drops$dtdep[j],length=60,by="min") 
>} 

Мой вывод выглядит следующим образом

> steptimes 
[1] "2014-04-28 11:32:00 EDT" "2014-04-28 11:33:00 EDT" "2014-04-28 11:34:00 EDT" "2014-04-28 11:35:00 EDT" 
[5] "2014-04-28 11:36:00 EDT" "2014-04-28 11:37:00 EDT" "2014-04-28 11:38:00 EDT" "2014-04-28 11:39:00 EDT" 
[9] "2014-04-28 11:40:00 EDT" "2014-04-28 11:41:00 EDT" "2014-04-28 11:42:00 EDT" "2014-04-28 11:43:00 EDT" 
[13] "2014-04-28 11:44:00 EDT" "2014-04-28 11:45:00 EDT" "2014-04-28 11:46:00 EDT" "2014-04-28 11:47:00 EDT" 
[17] "2014-04-28 11:48:00 EDT" "2014-04-28 11:49:00 EDT" "2014-04-28 11:50:00 EDT" "2014-04-28 11:51:00 EDT" 
[21] "2014-04-28 11:52:00 EDT" "2014-04-28 11:53:00 EDT" "2014-04-28 11:54:00 EDT" "2014-04-28 11:55:00 EDT" 
[25] "2014-04-28 11:56:00 EDT" "2014-04-28 11:57:00 EDT" "2014-04-28 11:58:00 EDT" "2014-04-28 11:59:00 EDT" 
[29] "2014-04-28 12:00:00 EDT" "2014-04-28 12:01:00 EDT" "2014-04-28 12:02:00 EDT" "2014-04-28 12:03:00 EDT" 
[33] "2014-04-28 12:04:00 EDT" "2014-04-28 12:05:00 EDT" "2014-04-28 12:06:00 EDT" "2014-04-28 12:07:00 EDT" 
[37] "2014-04-28 12:08:00 EDT" "2014-04-28 12:09:00 EDT" "2014-04-28 12:10:00 EDT" "2014-04-28 12:11:00 EDT" 
[41] "2014-04-28 12:12:00 EDT" "2014-04-28 12:13:00 EDT" "2014-04-28 12:14:00 EDT" "2014-04-28 12:15:00 EDT" 
[45] "2014-04-28 12:16:00 EDT" "2014-04-28 12:17:00 EDT" "2014-04-28 12:18:00 EDT" "2014-04-28 12:19:00 EDT" 
[49] "2014-04-28 12:20:00 EDT" "2014-04-28 12:21:00 EDT" "2014-04-28 12:22:00 EDT" "2014-04-28 12:23:00 EDT" 
[53] "2014-04-28 12:24:00 EDT" "2014-04-28 12:25:00 EDT" "2014-04-28 12:26:00 EDT" "2014-04-28 12:27:00 EDT" 
[57] "2014-04-28 12:28:00 EDT" "2014-04-28 12:29:00 EDT" "2014-04-28 12:30:00 EDT" "2014-04-28 12:31:00 EDT" 

Это хорошо, но мне нужно время шага, созданное для других капель. $ Dtdep

Любая помощь была бы очень признательна и принесла бы извинения, если бы это было невероятно упрощенным.

Спасибо!

ответ

0

Вероятно, было бы лучше без петли:

dtdep <- c(as.POSIXct("2014-04-28 10:14:00"), 
      as.POSIXct("2014-04-28 10:22:00")) 
drops <- data.frame(dtdep) 

steptimes <- lapply(drops$dtdep, function(x){ 
     seq(from = x, length = 60, by = "min") 
}) 
# As a vector 
steptimes <- do.call(c, steptimes) 
# As a data frame with one column if this is really necessary 
steptimes <- data.frame(steptimes) 

Если вам нужно только раз на основе первых п dtdep элементов выбрать те, как в steptimes <- lapply(drops$dtdep[1:5], ...

+0

Спасибо за ваш ответ, но я получив следующее сообщение об ошибке «Ошибка в seq.default (from = x, length = 60, by =« min »): « from »должно быть длиной 1». Я считаю, что это потому, что «x» является вектором datetimes и функция seq может обрабатывать только одиночные значения? Независимо от того, спасибо за ваш ответ, и я продолжу работать с ним. – Espenshade

+0

Извините, я не могу воспроизвести эту ошибку. 'x' - это не вектор, а единственный элемент' drops $ dtdep', вот для чего 'lapply'. Я отредактировал свой ответ, чтобы включить рабочий пример. – thie1e

+0

Это решило! Спасибо! Я думаю, что, возможно, я использовал неправильный объект для функции lapply. – Espenshade

Смежные вопросы