2016-12-30 2 views
-1

Новинка от [R] студии и с уважением обращаемся за помощью.Агрегация секундного интервала выборки до интервала 30 секунд, POSIXct

Цель: Я хотел бы получить данные, собранные с интервалом в 1 секунду, свернуть его до интервалов 30 секунд и, впоследствии, иметь «среднее» от каждой переменной, связанной с ним.

Вот что мои данные выглядит следующим образом:

line datetime   AA BB CC 
1 2016-06-27 14:13:16 6 0 0.0 
2 2016-06-27 14:13:17 10 0 48.6 
3 2016-06-27 14:13:18 7 0 52.0 
4 2016-06-27 14:13:19 13 0 54.4 
5 2016-06-27 14:13:20 16 0 60.8 
6 2016-06-27 14:13:21 6 0 65.5 
7 2016-06-27 14:13:22 6 0 47.5 
8 2016-06-27 14:13:23 6 1 46.8 
9 2016-06-27 14:13:24 4 1 55.5 
10 2016-06-27 14:13:25 4 1 51.1 
11 2016-06-27 14:13:26 4 1 53.4 

То, что я хотел бы видеть это:

line datetime  AA BB CC 
1 2016-06-27 14:13:16 18 1 50.5 
2 2016-06-27 14:13:46 19 1 52.8 

(здесь, переменные AA, BB, CC и были усреднены).

Были вопросы, подобные этому, но ни один из них не был достаточно подобен, чтобы дать мне основание для работы с моими небольшими знаниями в области кодирования и программирования. Я шагала вперед и назад между вероятными базовыми решениями r и вероятными решениями пакетов безрезультатно; главным образом потому, что реализация языка/синтаксиса по-прежнему немного чуждо мне.

+0

Вы попробовали ответ? это сработало? –

ответ

0

Я думаю, что вы хотите попробовать это: (основной раствор)

etw 
       datetime AA BB CC 
1 2016-06-27 14:13:16 6 0 0.0 
2 2016-06-27 14:13:17 10 0 48.6 
3 2016-06-27 14:13:18 7 0 52.0 
4 2016-06-27 14:13:19 13 0 54.4 
5 2016-06-27 14:13:20 16 0 60.8 
6 2016-06-27 14:13:21 6 0 65.5 
7 2016-06-27 14:13:22 6 0 47.5 
8 2016-06-27 14:13:23 6 1 46.8 
9 2016-06-27 14:13:24 4 1 55.5 
10 2016-06-27 14:13:25 4 1 51.1 
11 2016-06-27 14:13:26 4 1 53.4 

aggregate(x = etw, by = list(cut(etw$datetime,breaks = "10 sec")), FUN=mean) 

       Group.1   datetime AA BB CC 
1 2016-06-27 14:13:16 2016-06-27 14:13:20 7.8 0.3 48.22 
2 2016-06-27 14:13:26 2016-06-27 14:13:26 4.0 1.0 53.40 

вы можете изменить 10 сек часть 30 сек. однако - позаботьтесь: breaks = "10 sec" сократит диапазон до 10 сек срезов, начиная с минимального времени. которые в вашем случае приводят к единому срезу.

вы также можете вручную определить диапазон с помощью

breaks = seq.POSIXt(from = as.POSIXct("2016-06-27 14:13:00"),to = as.POSIXct("2016-06-27 14:14:00"),by="10 sec"))

aggregate(x = etw,FUN=mean, by = list(cut(etw$datetime,breaks = seq.POSIXt(from = as.POSIXct("2016-06-27 14:13:00"),to = as.POSIXct("2016-06-27 14:14:00"),by="10 sec")))) 
       Group.1   datetime  AA  BB  CC 
1 2016-06-27 14:13:10 2016-06-27 14:13:17 9.000000 0.0000000 38.75000 
2 2016-06-27 14:13:20 2016-06-27 14:13:23 6.571429 0.5714286 54.37143 

это не совсем то, что вы хотели бы получить, но имхо - ваши данные выборки не соответствует требуемой выходной :)

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