Разделить или установить данные на 30-минутные интервалы
У меня есть фрейм данных следующей формы:
Temp Depth Light x time date time.at.depth
104 18.59 -2.7 27 21:38 2012-06-20 4
109 18.59 -2.7 27 22:02 2012-06-20 5
110 18.75 -4.0 27 22:07 2012-06-20 5
113 18.91 -2.7 27 22:21 2012-06-20 4
114 18.91 -4.0 27 22:26 2012-06-20 5
115 18.91 -2.7 27 22:31 2012-06-20 5
117 18.91 -2.7 27 22:40 2012-06-20 4
118 18.75 -4.0 27 22:45 2012-06-20 5
119 18.75 -2.7 27 22:50 2012-06-20 5
121 18.59 -4.0 27 22:59 2012-06-20 4
122 18.75 -2.7 27 23:04 2012-06-20 5
123 18.75 -4.0 27 23:09 2012-06-20 5
126 18.59 -2.7 27 23:23 2012-06-20 5
127 18.59 -2.7 27 23:28 2012-06-20 5
128 18.59 -4.0 27 23:33 2012-06-20 5
133 18.75 -4.0 27 23:57 2012-06-20 5
136 18.59 -4.0 27 00:11 2012-06-20 5
138 18.59 -2.7 27 00:21 2012-06-20 5
140 18.91 -2.7 27 00:30 2012-06-20 5
Я хотел бы поместить данные в 30-минутные интервалы. Есть простой способ сделать это? Я посмотрел на split()
функции, но кажется, что вещи должны быть в числовом формате, чтобы это работало, у меня есть время в POSIXct
формат. Любые идеи очень приветствуются.
1 ответ
Решение
Вот вам одна строчка (dat
быть вашим фреймом данных):
split(dat, cut(strptime(paste(dat$date, dat$time), format="%F %R"),"30 mins"))
В самом деле cut.POSIXt
принимает значения перерыва
указание интервала, один из "sec", "min", "hour", "day", "DSTday", "week", "month", "квартал" или "year", необязательно с предшествующим целым числом и пробелом или сопровождаемый "s".
Кроме того, я использовал %F %R
как ярлык для %Y-%m-%d %H:%M
: увидеть ?strptime
чтобы увидеть все возможные форматы.