【问题标题】:Identify duplicate data with a threshold使用阈值识别重复数据
【发布时间】:2011-04-01 19:33:49
【问题描述】:

我正在处理蓝牙传感器数据,需要识别每个唯一 ID 可能重复的读数。蓝牙传感器每五秒进行一次扫描,如果设备移动不快(即坐在交通中),则可能会在随后的读数中拾取同一设备。如果该设备进行了往返,则可能有来自同一设备的多个读数,但这些读数应相隔几分钟。我不知道如何摆脱重复数据。如果 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")

【问题讨论】:

    标签: r


    【解决方案1】:

    怎么样:

    x <- 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")
    # ensure 'x' is ordered properly
    x <- x[order(x$macid,x$time),]
    # add timediff column by macid
    x$timediff <- ave(x$time, x$macid, FUN=function(x) c(NA,diff(x)))
    

    【讨论】:

    • 完美,我忘记了ave。我把一些东西和rle 放在一起,这很相似,但这更直接,更切中要害。非常感谢。
    猜你喜欢
    • 2019-06-20
    • 2015-01-23
    • 1970-01-01
    • 2017-10-07
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2015-10-25
    相关资源
    最近更新 更多