2012-11-24 53 views
0

我有一个关于如何通过列名填充矩阵的问题。我想下面的例子会清楚我想要什么。获取另一个向量中的向量索引

mat <- matrix(NA, nrow = 10, ncol = 5) 
colnames(mat) <- c("Apple", "Orange", "Pear", "Grape", "Mango") 

现在我有一个新的矩阵,它的列名的列名的子集mat,并与任意顺序。

jmat <- matrix(rnorm(4), nrow = 4, ncol = 1) 
rownames(jmat) <- sample(c("Apple", "Orange", "Grape", "Mango")) 

我想通过相应的值jmat填补mat第一行。 jmat中的“Apple”的值应该在mat等的“Apple”列中。由于jmat中没有“Pear”行,因此mat中的“Pear”列仍将是NA。做这件事最简单的方法是什么?

谢谢。

回答

0

我发现match功能可以在另一个载体内给出一个向量的索引。

> jmat 
      [,1] 
Grape -0.2728387 
Apple 2.2843550 
Mango -1.3079324 
Orange -0.6129420 
> match(rownames(jmat), colnames(mat)) 
[1] 4 1 5 2 
> ind <- match(rownames(jmat), colnames(mat)) 
> mat[1, ind] <- jmat[, 1] 
> mat 
     Apple Orange Pear  Grape  Mango 
[1,] 2.284355 -0.612942 NA -0.2728387 -1.307932 
[2,]  NA  NA NA   NA  NA 
[3,]  NA  NA NA   NA  NA 
[4,]  NA  NA NA   NA  NA 
[5,]  NA  NA NA   NA  NA 
[6,]  NA  NA NA   NA  NA 
[7,]  NA  NA NA   NA  NA 
[8,]  NA  NA NA   NA  NA 
[9,]  NA  NA NA   NA  NA 
[10,]  NA  NA NA   NA  NA 
1

外连接:

merge(mat, t(jmat),all=T) 
     Apple Orange  Grape  Mango Pear 
1 2.372201 0.8330786 -0.4295133 -0.8425752 NA 
2  NA  NA   NA   NA NA 
3  NA  NA   NA   NA NA 
4  NA  NA   NA   NA NA 
5  NA  NA   NA   NA NA 
6  NA  NA   NA   NA NA 
7  NA  NA   NA   NA NA 
8  NA  NA   NA   NA NA 
9  NA  NA   NA   NA NA 
10  NA  NA   NA   NA NA 
11  NA  NA   NA   NA NA 
相关问题