2016-10-04 242 views
2

我有一個帶有名稱的字符矩陣M1和一個帶有值的命名列表L1。從矩陣中獲取矩陣的名稱和值列表

我想創建一個矩陣M2,其值與M1的大小相同。對於M2中的每個單元格,應該有在L1中對應於M1中的名稱的值。其中M1的名稱不在L1中的單元格應爲NA。

我試圖這樣做,但沒有設法。

下面是我想要做的一個例子。

>M1 
    [,1] [,2] [,3] [,4] 
[1,] "n1" "n4" "n7" "n10" 
[2,] "n2" "n5" "n8" "n11" 
[3,] "n3" "n6" "n9" "n12" 

> L1 
$n1 
[1] 1 

$n2 
[1] 2 

$n8 
[1] 3 

$n25 
[1] 4 

從那裏M2應當最終被:

> M2 
    [,1] [,2] [,3] [,4] 
[1,] 1 NA NA NA 
[2,] 2 NA 3 NA 
[3,] NA NA NA NA 

重現性實施例中,

dput(m1) 
structure(c("n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9", 
"n10", "n11", "n12"), .Dim = 3:4) 

dput(L1) 
structure(list(n1 = 1, n2 = 2, n8 = 3, n25 = 4), .Names = c("n1", 
"n2", "n8", "n25")) 
+0

能否請您做重複性的例子?幫助你會更容易。 – Sotos

+0

M1和L1是我擁有的數據。它基本上就像這個例子:M1中的一些字符串。 L1中的名字與M1中的字符串相對應(儘管有些不是)。我不太瞭解我如何幫助您更輕鬆地完成工作。一些產生M1和L1的隨機函數? –

回答

2

一種方式是unlistL1並與矩陣的每個元素匹配的名稱

apply(m1, 1:2, function(i) unlist(L1)[match(i, names(L1))]) 

#  [,1] [,2] [,3] [,4] 
#[1,] 1 NA NA NA 
#[2,] 2 NA 3 NA 
#[3,] NA NA NA NA 
-4

我們還可以通過match做到這一點荷蘭國際集團的「M1」與「L1」的names拿到指標,使用與「L1」來代替,並更改尺寸

`dim<-`(unlist(L1)[match(m1, names(L1))], dim(m1)) 
#  [,1] [,2] [,3] [,4] 
#[1,] 1 NA NA NA 
#[2,] 2 NA 3 NA 
#[3,] NA NA NA NA