【发布时间】:2017-01-07 02:24:50
【问题描述】:
假设您有一个矩阵 (X) 和第二个矩阵 (src),这样 X 的行名是 src 的行名的子集,X 的列名是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
【问题讨论】:
-
@JasonAizkalns 好点。完成。