Я работаю с данными датчика Bluetooth и должен определить возможные повторяющиеся показания для каждого уникального идентификатора.Датчик Bluetooth выполняет сканирование каждые пять секунд и может брать одно и то же устройство в последующих чтениях, если устройство не двигалось быстро (то есть сидело в пробке).Может быть несколько показаний с одного и того же устройства, если это устройство совершило круговую передачу, но они должны быть разделены несколькими минутами.Я не могу понять, как избавиться от дубликатов данных.Мне нужно вычислить столбец разницы во времени, если совпадает macid.
Данные имеют формат:
macid time
00:03:7A:4D:F3:59 82333
00:03:7A:EF:58:6F 223556
00:03:7A:EF:58:6F 223601
00:03:7A:EF:58:6F 232731
00:03:7A:EF:58:6F 232736
00:05:4F:0B:45:F7 164141
И мне нужно создать:
macid time timediff
00:03:7A:4D:F3:59 82333 NA
00:03:7A:EF:58:6F 223556 NA
00:03:7A:EF:58:6F 223601 45
00:03:7A:EF:58:6F 232731 9310
00:03:7A:EF:58:6F 232736 5
00:05:4F:0B:45:F7 164141 NA
МойПервая попытка сделать это очень медленно и не очень удобно:
dedupeIDs <- function (zz) {
#Order by macid and then time
zz <- zz[order(zz$macid, zz$time) ,]
zz$timediff <- c(999999, diff(zz$time))
for (i in 2:nrow(zz)) {
if (zz[i, "macid"] == zz[i - 1, "macid"]) {
print("Different IDs")
} else {
zz[i, "timediff"] <- 999999
}
}
return(zz)
}
Затем я смогу отфильтровать data.frame по столбцу разницы во времени.
Пример данных:
structure(list(macid = structure(c(1L, 2L, 2L, 2L, 2L, 3L),
.Label = c("00:03:7A:4D:F3:59", "00:03:7A:EF:58:6F",
"00:05:4F:0B:45:F7"), class = "factor"),
time = c(82333, 223556, 223601, 232731, 232736, 164141)),
.Names = c("macid", "time"), row.names = c(NA, -6L),
class = "data.frame")