Я использую таблицу данных в R для хранения временных рядов. Я хочу вернуть подмножество таким образом, чтобы последовательные строки для выбранных времен составляли не менее N секунд от последней выбранной строки, например. если у меня естьВременные ряды подмножества, чтобы выбранные ряды отличались на определенное минимальное время
library(data.table)
x <- data.table(t=c(0,1,3,4,5,6,7,10,16,17,18,20,21), v=1:13)
x
t v
1: 0 1
2: 1 2
3: 3 3
4: 4 4
5: 5 5
6: 6 6
7: 7 7
8: 10 8
9: 16 9
10: 17 10
11: 18 11
12: 20 12
13: 21 13
и я хочу попробовать строк, которые по крайней мере, 5 секунд друг от друга, начиная с первой строки, то я должен получить data.table с парами время/значение:
y <- x[...something...]
y
t v
1: 0 1
2: 5 5
3: 10 8
4: 16 9
5: 21 13
Образцы времени также не должны быть на регулярной основе, поэтому я не могу просто взять каждый M строк. Конечно, я мог бы сделать это, перейдя по строкам data.table вручную, но мне интересно, есть ли более удобный способ выразить это с помощью индексации data.tables.
Кажется, что 'findInterval' также должен работать здесь, но я не могу этого понять. – Frank
Yikes, я считаю, что ответ «нет», для этого нет удобной парадигмы индексирования. Я, вероятно, просто передам его на Rcpp, если моя реализация R станет узким местом. Спасибо за помощь. – Anthony
@ Энтони Да, я думаю, вы правы в том, что там не было удобного способа, но я также думаю, что вы недооцениваете сложность правила «Максимальный набор строк, которые находятся всего на расстоянии не менее пяти секунд». Если вы не заботитесь о части «максимального набора», тогда она становится намного проще и не требуется вычислять итеративно: 'x [x [. (T = seq (t [1L], t [.N ], by = 5 * 2)), on =. (t), roll = TRUE, что = TRUE, mult = "first"]] 'Выберите до одного числа с каждого 10-секундного интервала et voila - ваше состояние выполняется. В любом случае, если вы найдете хороший способ Rcpp, возможно, вы можете опубликовать его в качестве ответа, чтобы мы могли его увидеть. – Frank