我有一个查询和参考数据框。它们非常相似,但不完全相同。您可以说它们来自相同的数据。问题是我注意到有时其中一个与另一个不一致。当我应用匹配函数时,由于这种不对齐,我趋向于获得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个元素与第二组引用进行匹配,那么在病房中,我将获得更高的匹配度。