Существует ли более эффективный способ подстановки фрейма данных временного ряда в нерегулярный, повторяющийся двоичный столбец триггера? - PullRequest
0 голосов
/ 25 марта 2019

Я работаю с потоком данных временного ряда из эксперимента.Мы записываем несколько каналов данных, в том числе триггерный канал ('X7.ramptrig' в связанных данных: пример данных временного ряда), который указывает, когда соответствующее событие происходит в других каналах.

Я пытаюсь создать подмножестваиз следующих n строк (например, 15 000) временного ряда (временные шаги 0,1 мс), которые появляются после запуска триггера ('1').В этом столбце есть несколько триггеров ('1'), перемежающихся с нерегулярными интервалами.Каждый второй шаг времени равен «0», что указывает на отсутствие нового события.

Я прошу посмотреть, есть ли более эффективное решение для непосредственного поднабора последующих n строк после обнаружения триггера вместо косвенного(возможно, негибкое) решение, которое я придумала.

Ссылка на простые примеры данных: https://gtvault -my.sharepoint.com /: t: / g / personal / shousley6_gatech_edu / EZZSVk6pPpJPvE0fXq1W2KkBhib1VDoV_X5B0CoSerdjFQ? E

101 * 101 * i1 * 101 * i1иметь рабочее решение, которое создает индекс из канала триггера и разделяет набор данных по этому индексу.Поскольку триггеры имеют разную расстановку во времени, последующие подмножества фреймов данных не согласованы, и иногда существуют «дополнительные» подмножества, которые предшествуют «важным» (например, «res $ 0»).Кроме того, мне нужно, чтобы поднаборы были сопоставлены по общему времени и выровнены для начала триггера.

Мое текущее решение «обрезает» списки фреймов данных до одинакового размера (в примере до первых 15 000 строк).Хотя это технически работает, это кажется неуклюжим.Я также пытался перевести решение SQL с помощью FETCH NEXT, но эти функции недоступны в SQLite, поддерживаемом в R.

Я полностью открыт для альтернатив, поэтому, пожалуйста, не ограничивайтесь моим текущим решением.

##create index to detect whenever an event trigger occurs 
idx<-c(0, cumsum(diff(Time_Series_Data_Example$X7.ramptrig) >0))

## split the original dataframe on event triggers
split1<-split(Time_Series_Data_Example, idx) 

## cuts DFs down to 1.5s 
res <- lapply(split1, function(x){ 
  x <- top_n(x, -15000) 
})

Вот пример вывода данных: 'head (res [["1"]]'

2

Для предоставленных данных и кода примера,выходное значение составляет 4 подмножества, 3 из которых являются «важными» и синхронизируются по времени с триггером. Первое «res $ 0» - это выбрасываемое подмножество.

Заранее спасибо и, пожалуйста, дайте мне знать, как я могу улучшитьмой вопрос задаю (это моя первая попытка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...