如何填充具有命名行和列的矩阵?

时间:2016-08-30 17:27:36

标签: r matrix

假设您有一个矩阵(X)和第二个矩阵(src),以便X的rownames是src的rownames和colnames的子集X的{​​{1}}是src的共同名称的子集。使用src的行和列创建矩阵的最佳方法是什么,X的数据,以及缺少的数据填入了一些默认值(例如零或NA )?

以下是我的尝试,但我觉得在R中必须有一种标准的方法。

# Assume row and columns are named
PadColumns <- function(x, src, fill = NA) {
  # pad columns with default values
  result <- matrix(fill, nrow = nrow(x), ncol = ncol(src))
  colnames(result) <- colnames(src)
  rownames(result) <- rownames(x)
  result[,match(colnames(x), colnames(src))] <- x
  result
}

PadRows <- function(x, src, fill = NA) {
  # pad rows with default values
  result <- matrix(fill, nrow = nrow(src), ncol = ncol(x))
  colnames(result) <- colnames(x)
  rownames(result) <- rownames(src)
  result[match(rownames(x), rownames(src)),] <- x
  result
}

PadRowsColumns <- function(x, src, fill = NA) {
  PadColumns(PadRows(x, src, fill = fill), src, fill = fill)
}

例如,给定

X <- matrix(1:6, nrow = 2, dimnames = list(letters[2 * 1:2], LETTERS[2 * 1:3]))
src <- matrix(0, nrow = 4, ncol = 6, dimnames = list(letters[1:4], LETTERS[1:6]))

然后我们应该得到这个:

> X
  B D F
b 1 3 5
d 2 4 6
> PadRowsColumns(X, src)
   A  B  C  D  E  F
a NA NA NA NA NA NA
b NA  1 NA  3 NA  5
c NA NA NA NA NA NA
d NA  2 NA  4 NA  6

1 个答案:

答案 0 :(得分:2)

您可以按行和列名称对矩阵进行子集。

src <- matrix(1, nrow = 3, ncol = 4, 
              dimnames= list(c("a", "b", "c"), c("A", "B", "C", "D")))
X <- matrix(1:6, nrow = 2, ncol = 3,
            dimnames = list(c("b", "c"), c("A", "C", "D")))
Y <- src
Y[] <- NA
Y[rownames(X), colnames(X)] <- X