2011-07-19 52 views
1

ローとカラムの数が異なり、ローの名前はいくつか共有しているが、他のものは共有していない2つのデータフレームがあるとします。私は結果のデータフレームが構成データフレームからのユニークなrownamesを持ち、行と列の組み合わせが構成データに存在しなかった場所に単に「NA」を入れるようにそれらを一緒にcbindできるようにしたい。私はこれを行うことができる何らかの種類の結合またはマージ操作が必要であると思ったが、私はそれを見つけることに成功しなかった。前もって感謝します!cbind異なるローン数とロー数を持つ2つのデータフレーム

編集:ここに私が書いたものだし、それが動作しているようですが、私はそれがどのように堅牢わからない:

new.cbind <- function(...) 
{ 
    input <- eval(substitute(list(...), env = parent.frame())) 

    names.orig <- NULL 
    nrows <- numeric() 
    for (i in 1:length(input)) 
    { 
     nrows[i] <- nrow(input[[i]]) 
     names.orig <- c(names.orig, colnames(input[[i]])) 
    } 

    idx <- (1:length(input))[order(nrows, decreasing=T)] 
    x <- NULL 
    for (i in 1:length(input)) 
    { 
     x <- c(x, rownames(input[[idx[i]]])) 
    } 

    r <- data.frame(row.names=unique(x)) 
    for (i in 1:length(input)) 
    { 
     r <- cbind(r, data.frame(input[[i]][match(rownames(r), rownames(input[[i]])),])) 
    } 

    colnames(r) <- names.orig 

    return(r) 
} 
+0

行名にデータを格納しないでください。マージを使用します。 – hadley

答えて

2

あなたの質問は、あなたが結果として望むものについて十分に固有ではありません(何をその場合、rownamesは等しいか?)。私はあなたがrownameを使用して参加することはできないと思う - ちょうど列としてrownameを入れて、その列に設定されたパラメータ 'によって' merge()関数を使用してください。あなたの場合、おそらく完全な外部結合(?)、つまりall = TRUE?

+0

rownamesが等しい場合は、2つのフレームを一緒にバインドするだけです。私はこれを行う何かを書いて巻いたが、それはclunkyだと私は本当にどれくらい頑丈であるか分からない。 – Josh

+0

直感的に私を助けました – derive111

関連する問題