2016-10-04 187 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