我有一个关于如何通过列名填充矩阵的问题。我认为下面的例子可以清楚地说明我想要什么。
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。做这件事最简单的方法是什么?
谢谢。
发布于 2012-12-03 22:23:04
我发现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-11-25 01:55:38
外部联接:
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   NAhttps://stackoverflow.com/questions/13543866
复制相似问题