2011-07-19 48 views
1

假設我有兩個數據幀,每個數據幀具有不同數量的行和列,並共享一些行名稱但不共享其他行。我希望能夠將它們混合在一起,以便所得到的數據幀具有來自組成數據幀的所有獨特的rownames,並且簡單地在組成數據中存在行和列組合不存在的'NA' 。我認爲必須有某種加入或合併操作可以做到這一點,但我沒有找到一個成功的。提前致謝!用不同的rownames和行數綁定兩個數據幀

編輯:這是我寫的,它似乎工作,但我不知道它是如何強大的是:

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()函數並將參數'by'設置爲該列。在你的情況下,也許作爲全外連接(?),即所有= TRUE?

+0

如果rownames是平等的,那麼我只是希望它將兩個框架結合在一起。我寫了一些能做到這一點的東西,但它很笨重,我不確定它的真實性有多強大。 – Josh

+0

直覺上它幫了我 – derive111