我有一个关于如何通过列名填写矩阵的问题。我认为以下示例将清楚地说明我想要的内容。
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
的第一行。 jmat
中“Apple”的值应位于mat
等的“Apple”列中。因为jmat
中没有“Pear”行,所以“Pear”列在mat
中仍然是NA
。这样做最简单的方法是什么?
谢谢。
答案 0 :(得分: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
答案 1 :(得分: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