首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个集合中分类匹配和不匹配的数据

从两个集合中分类匹配和不匹配的数据
EN

Stack Overflow用户
提问于 2014-10-24 21:40:32
回答 1查看 188关注 0票数 2

我有来自两个源的数据集,它们表示相同的事件集。并不是所有的事件都存在于这两个集合中,一些事件有多个发生,并且时间信息不一定是同步的。例如:考虑两个传感器,它们在X,Y中正确注册,但具有不同的灵敏度和响应特性,以及漂移时钟。

我可以执行数据帧的外部连接并拆分出complete.cases()。这将产生无法匹配的事件和内部连接结果。内连接结果可能非常大,因为在X,Y上碰撞的两个集合中都有多个事件。我相信这被称为一个指定错误的连接,但它给出的结果是我可以进一步过滤以匹配事件。

我尝试过在键上获得unique(),使用子集()进行提取并有条件地进行处理。如果子集的nrow()为1,则为推定匹配;如果nrow()大于1,则进行进一步处理以匹配所能匹配的内容。我尝试过对键进行拆分(),这样做速度更快,但也存在较大数据集的问题。

使用data.table似乎可以稍微加快速度,但不太快。然而,我确信我并没有使用它的全部功能。此时我所做的就是指定键,这样它们就不需要为merge()重新生成。

以下是我想要做的一些事情,以加快这一进程:

  1. 提取不匹配的事件,这样我就可以进行内部连接而不是外部连接。
  2. 在执行任何基于键的拆分/子设置之前,先将所有的单匹配事件分割掉。
  3. 以一种形式获取多匹配事件,而不是.x和.y的所有可能组合,它有一个.x值的向量或列表以及另一个.y值。

下面是生成几个具有代表性的数据帧的代码:

代码语言:javascript
复制
# Describe the basic frame
seedSize <- 7
keyCols <- c("x", "y")
noKeyCols <- c("time", "duration")
colSize <- length(keyCols) + length(noKeyCols)
frameSize <- seedSize * colSize

# Instantiate two with unique values
DF1 <- data.frame(matrix(1:frameSize, nrow=seedSize, ncol=colSize))
colnames(DF1) <- append(keyCols, noKeyCols)
DF2 <- DF1 + frameSize

# Duplicate a few from self and other and mangle no-key values
DF1 <- rbind(DF1, DF2[c(1:4, 1:3, 1, 6),])
DF1 <- rbind(DF1, DF1[c(1:5, 1:2),])
newRows <- (seedSize+1):nrow(DF1)
DF1[newRows, noKeyCols] <- DF1[newRows, noKeyCols] + newRows
DF2 <- rbind(DF2, DF1[c(1:4, 1:3, 1, 6),])
DF2 <- rbind(DF2, DF2[c(1:5, 1:2),])
newRows <- (seedSize+1):nrow(DF2)
DF2[newRows, noKeyCols] <- DF2[newRows, noKeyCols] + newRows

# Do some joins (sorting to make comparable)
DFI <- merge(DF1, DF2, by=keyCols)
DFI <- DFI[do.call(order, as.list(DFI),),]
row.names(DFI) <- NULL
DFO <- merge(DF1, DF2, by=keyCols, all=TRUE)
# Use complete.cases() to generate inner-join from outer
DFI2 <- DFO[complete.cases(DFO),]
row.names(DFI2) <- NULL

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-10-24 22:27:51

假设DT1DT2是您的data.tables,我认为这就是您要寻找的(但不确定):

代码语言:javascript
复制
setkey(DT1, x, y)
DT1[DT2, nomatch=0L]

如果您愿意,也可以将DT2的键设置为x,y

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26556699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档