Найти строки с заданной разницей между значениями в столбце

Для data.table (или data.frame) в R я хочу найти все строки, которые содержат значение в столбце «значение», которые являются заданным расстоянием «расстояние» от другого этого значения подряд с тем же ключом. Итак, учитывая следующее:

distance <- 22
   key value
   A     1
   B     1
   C     1
   D     1
   A     4
   B     4
   A    23
   B    23
   B    26
   B    26
   C    30

Я хотел бы аннотировать исходную таблицу количеством строк, существующих с одним и тем же ключом, и значением, равным +22 от него:

  key value count
  A     1     1
  B     1     1
  C     1     0
  D     1     0
  A     4     0
  B     4     2
  A    23     0
  B    23     0
  B    26     0
  B    26     0
  C    30     0

Я действительно не знаю, где начнем с этого самореферентного подхода к манипулированию данными в R. Мои первоначальные попытки включали создание второй таблицы и попытку сопоставления с ней, но это казалось странным и плохим подходом.

Примечание. Я использую пакет data.table, но в этом случае я буду рад работать с data.frame, если это упростит задачу.

Воспроизводимый:

require(data.table)
source <- data.table(data.frame(key=c("A","B","C","D","A","B","A","B","B","B", "C"),value=c(1,1,1,1,4,4,23,23,26,26,30)))
result <- data.table(data.frame(key=c("A","B","C","D","A","B","A","B","B","B","C"),value=c(1,1,1,1,4,4,23,23,26,26,30),count=c(1,1,0,0,0,2,0,0,0,0,0)))
5
задан Matt Dowle 24 May 2012 в 13:55
поделиться