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"))

我想mat用 中的相应值填充 的第一行jmat。中的“Apple”的值jmat应该在中的“Apple”列中mat,等等。因为中没有“Pear”行jmat,所以中的“Pear”列mat仍然会是a NA。最简单的方法是什么?

谢谢你。

4

2 回答 2

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
于 2012-11-24T17:55:37.793 回答
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
于 2012-12-03T14:23:04.387 回答