从带有名称的矩阵和带有值的列表中获取值的矩阵

时间:2016-10-04 09:32:26

标签: r

我有一个带有名字的字符矩阵M1和带有值的命名列表L1。

我想创建一个矩阵M2,其值与M1的大小相同。对于M2中的每个单元,应该存在L1中与M1中的名称对应的值。 M1的名称不在L1,M2的单元格应为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"))

2 个答案:

答案 0 :(得分:2)

一种方法是unlist L1并将名称与矩阵的每个元素相匹配

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

答案 1 :(得分:-4)

我们也可以通过{{1}使用'{1}}的'{1}}来获取索引并使用它替换为'L1​​',并更改维度

XMLGregorianCalendar rqDateTime = 
    paramsContainer.<XMLGregorianCalendar>getWithType(Param.SYS_RATES_DATE);