假設我有以下類似的數據結構,其中DOC_ID是文件標識符,text_id是唯一的文本/版本標識和文字是一個字符串:有條件的循環在R不識別條件語句?
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)被忽略,只有其他部分被返回?
任何關於編碼或處理時間效率收益的進一步建議將不勝感激。
您是否檢查過結果矩陣,它看起來像是在工作,您在這裏看到的輸出僅適用於最後一行(或列)..查看您的i,j排序。 (df [i,1] == df [j,1])'你打算做什麼'if(df [i,1] == df [j,2]) '? – Ananta
我只想在不同版本的「相同」文檔(相當於doc_ids但不同的text_ids)之間進行比較(字符串距離)......所以不需要。但是你提出的建議是改變輸出結構是正確的,按照@Maiasaura的原始建議。 –