2016-08-30 4 views
1

あなたがXのrownamesがsrcのrownamesとXのCOLNAMESのサブセットであるsrcのCOLNAMESのサブセットであることをマトリックス(X)及びそのような第2の行列(src)を有すると仮定する。 srcの行と列、データがX、欠落したデータがデフォルト値(0またはNAなど)で埋められている行列を作成する最も良い方法は何ですか?その後、我々はこれを取得する必要 名前付きの行と列で行列を埋め込む方法は?

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

を与え、以下

は私の試みですが、私は、例えば

# 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) 
} 

R.でこれを行うための標準的な方法が存在しなければならないと感じ:

> 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 
+0

@JasonAizkalns良い点。完了しました。 – banbh

答えて

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 
+0

Duh!私は自分のコードよりも単純なものがなければならないことを知っていました。ありがとう! – banbh

関連する問題