2016-03-31 31 views
2

我有一個字符詞矩陣(3乘3)和一個字典(n乘1)。我想查找與字典匹配的字符,將被字典中存在的字符位置替換,並且所有不匹配的字將被刪除(NA或NULL)。我試過簡單的pmatch,但它不起作用。我在尋找這樣的結果,pmatch以錯誤的方式返回字符匹配

1 5 2 
1 4 NA 
3 NA 2 

,但得到的結果通過這種方式,[1] 1 NA 3 5 4 NA 2 NA NA

我試過的代碼波紋管,

a <- matrix(c("456_rr", "432_uu", "522_kk", "456_rr", "432_tt", "522", "456_ss", "432", "522_kk"), nrow = 3, ncol = 3, byrow = TRUE) # WordTable 

b <- matrix(c("456_rr","522_kk","456_ss", "432_tt", "432_uu"), nrow = 5, ncol = 1) # Dictionary 

c <- pmatch(a, b) 

print(c) 
+0

UFS,感謝@akrun。但仍遠未達到預期的結果。以及如何保持矩陣明智? –

+1

我剛剛更新了一個解決方案。您可以通過調用'matrix'或使用'dim'將其轉換爲矩陣。你確定預期值是正確的嗎? – akrun

+0

讓我知道,如果這是一個錯字。否則我會刪除我的答案 – akrun

回答

2

nrow在「B」不是正確。它應該是5

b <- matrix(c("456_rr","522_kk","456_ss", "432_tt", 
    "432_uu"), nrow = 5, ncol = 1) 
v1 <- pmatch(a,b) 
m1 
#[1] 1 NA 3 5 4 NA 2 NA NA 

dim(m1) <- dim(a) 
m1 
#  [,1] [,2] [,3] 
#[1,] 1 5 2 
#[2,] NA 4 NA 
#[3,] 3 NA NA 

如果我們需要得到重複的索引,使用duplicates.ok=TRUE默認情況下爲FALSE

`dim<-`(pmatch(a, b, duplicates.ok=TRUE), dim(a)) 
#  [,1] [,2] [,3] 
#[1,] 1 5 2 
#[2,] 1 4 2 
#[3,] 3 NA 2 
+0

感謝@akrun對於這個大的幫助,但它仍然不是字典中的預期位置。這是'pmatch'的限制嗎? –

+1

@Noah改變了輸出。我們需要添加'duplicates.ok' – akrun

+1

感謝您的幫助,它的工作正常。 :)歡呼聲。 –

相關問題