如何在R中匹配相似但未对齐的数据帧

时间:2019-06-01 08:54:27

标签: r dataframe

我有一个查询和参考数据框。它们非常相似,但不完全相同。您可以说它们来自相同的数据。问题是我注意到有时其中一个与另一个不一致。当我应用匹配函数时,由于这种不对齐,我趋向于获得0个匹配项的间隔。

目前,我拥有的匹配函数采用查询df的[x:y]并将其与参考df的[x:y]进行匹配,并计算有多少匹配项。

reference <-data.frame(str=c("a","a","b","a","a","a","a","b","c","a","b","a","b","c","a"), stringsAsFactors=F)

query <- data.frame(str=c("a","a","b","b","b","c","a","a","a","a","b","c","a","b","a"), stringsAsFactors=F)

如您所见,它们非常相似。但是在查询df中,[3:6]中有很多额外的东西,之后它与参考df相同。现在在我的匹配函数中,如果我设置一个3个元素的窗口来进行匹配,则每次到达该点时都将得到0匹配。所以我想知道是否有一种方法,如果我尝试将查询df的窗口与引用df的对应窗口匹配时得到0匹配,也许是将查询df的同一窗口匹配到下一个引用的窗口df?

matchloopx <- function(data, data2, a) {
n<-1
m<-a
l <- 1
mylist2 <- list()
while(m <= nrow(data2)) {
  tempdf0.1 <- as.data.frame(data2[n:m,], stringsAsFactors = FALSE)
  colnames(tempdf0.1) <- "str"
  tempdf0.2 <- as.data.frame(data[n:m,], stringsAsFactors = FALSE)
  colnames(tempdf0.2) <- "str"
  tempdf0.3 <- distancepos(tempdf0.2, tempdf0.1, "str","str")
  tempdf0.3$loop <- l
  mylist2[[l]] <- tempdf0.3
  n <- n+a
  m <- n+(a-1)
  l <- l+1
}
tempdf0.5 <- do.call(rbind, mylist2)
return(tempdf0.5)
}

matchloopx(reference, query, 3)

所以在这里,我尝试将3个元素乘以3个元素。结果就是这样。

       loop
[1,] 3 1   
[2,] 0 2   
[3,] 1 3   
[4,] 2 4   
[5,] 1 5  

问题是当涉及到循环的第二次迭代时,我得到0个匹配项。但是我知道,如果我忽略查询中的第二组3个元素,并尝试将第三组3个元素与第二组引用进行匹配,那么在病房中,我将获得更高的匹配度。

0 个答案:

没有答案