2013-03-22 5 views
4

У меня есть кадр данных следующего вида:расщепленные или подмножество данных в 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. Любые идеи очень приветствуются.

+0

Вы посмотрели на функцию cut()? – screechOwl

+0

Это выглядит релевантно: http://stackoverflow.com/questions/7528571/aggregate-count-occurences-of-values-over-arbitrary-timeframe – Ben

ответ

4

Вот один вкладыш для вас (dat быть вашим dataframe):

split(dat, cut(strptime(paste(dat$date, dat$time), format="%F %R"),"30 mins")) 

Действительно cut.POSIXt принимает в качестве значения пролом

интервал спецификации, один из "сек", "мин" «час», «день», «день DSTday», «неделя», «месяц», «квартал» или «год», необязательно предшествующие целому числу и пробелу или сопровождаемые «s».

ценам добавляется, я использовал %F %R в качестве ярлыка для %Y-%m-%d %H:%M: см ?strptime, чтобы увидеть все возможные форматы.

+2

Как немного предупреждение, хотя в примере, который вы дали, если это подразумевается чтобы быть в правильном порядке, ваши значения за полночь должны быть изменены на '2012-06-21', иначе они будут неправильно переведены' strptime'. – plannapus

+0

Спасибо, что отлично работали, чтобы разделить данные на 30-минутные интервалы. Есть ли способ использовать «apply()» или другую функцию, чтобы найти среднюю и стандартную ошибку температуры в течение каждого интервала? – user1997414

+1

Используйте 'lapply'. Например, если вы сохраните результаты моего ответа как 'res':' lapply (res, function (x) mean (x $ Temp)) 'или' lapply (res, function (x) sd (x $ Temp)) ' , – plannapus