假设我有以下类似的数据结构,其中 doc_id 是文档标识符, text_id 是唯一的文本/版本标识符, text 是字符串:
df <- cbind(doc_id=as.numeric(c(1, 1, 2, 2, 3, 4, 4, 4, 5, 6)),
text_id=as.numeric(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
text=as.character(c("string1", "str2ing", "3string",
"string6", "s7ring", "string8",
"string9", "string10")))
我试图在循环结构中做的是字符串编辑距离比较,但仅适用于同一文档的不同版本。简而言之,我想找到匹配的 doc_ids 并成对比较同一文档的不同版本(text_ids)。
#Results matrix
result <- matrix(ncol=10, nrow=10)
#Loop
i=1
for (j in 1:length(df[,2])) {
for (i in 1:length(df[,2])) {
#Conditional Statements
if(df[i,1]==df[j,1]){
result[i,j]<-levenshteinDist(df[j,3], df[i,3])}
else(result[i,j]<-"Not Compared")
}
print(result[i,j])
flush.console()
}
回报:
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "Not Compared"
[1] "0"
该levenshteinDist()
功能可以在RecordLinkage
包中找到,但类似的功能也捆绑在utils
包中adist()
我的问题是:为什么我的第一个条件语句 (if) 被忽略,而只返回 else 部分?
任何有关编码或处理时间效率增益的进一步建议将不胜感激。