2014-03-03 121 views
1

我需要一個保存在列表中的ffdf數據幀的外連接。已經檢查了this,但它指的是一個不同的問題。對於RAM對象的示例代碼:合併R中的ffdf數據幀

x1 = data.frame(name='a1', Ai=2, Ac=1, Bi=1) 
x2 = data.frame(name='a2', Ai=1, Bi=3, Bc=1, Ci=1) 
x3 = data.frame(name='a3', Ai=3, Ac=2, Bi=2, Ci=3, Cc=1, Di=2, Dc=2) 
x4 = data.frame(name='a4', Ai=3, Bi=2, Ci=1, Fi=2) 
dl = list(x1,x2,x3,x4) 
mergedDF = Reduce(function(...) merge(..., all=T), dl) 
mergedDF[is.na(merged.data.frame)] = 0 

期望的結果是這樣的:

mergedDF 
    name Ai Bi Ci Ac Bc Cc Di Dc Fi 
1 a1 2 1 0 1 0 0 0 0 0 
2 a2 1 3 1 0 1 0 0 0 0 
3 a3 3 2 3 2 0 1 2 2 0 
4 a4 3 2 1 0 0 0 0 0 2 

只要我把數據幀,雖然ffdf,我得到的錯誤

Error in merge.ffdf(..., all = T) : merge.ffdf only allows inner joins 

任何已知workrounds?提前謝謝了。

+0

如果我正確理解你的問題。 ffbase的開發版本包含一個名爲'ffdfrbind.fill'的函數(類似於rbind.fill)。 '庫(devtools); install_github(「edwindj/ffbase」,subdir =「pkg」)'將安裝該開發版本。通常ffdfrbind.fill(x1,x2,x3,x4)會讓你在那裏。 – jwijffels

+0

rbind.fill的功能確實是需要的。不幸的是,當我嘗試'install_github(「edwindj/ffbase」,subdir =「pkg」)''時發生了這個錯誤:''錯誤:編譯包'ffbase''失敗 – Audrey

+0

我相信你正在使用windows。如果您想像install_github那樣從源代碼安裝軟件包,則需要安裝Rtools。你有安裝Rtools嗎? http://cran.r-project.org/bin/windows/Rtools/ – jwijffels

回答

1

此信息對我有幫助Combine two data frames by rows (rbind) when they have different sets of columns。所以,做類似的事情與你:

install.packages('plyr') 
    require(plyr) 
    answer <- Reduce(rbind.fill,dl) 
    answer[is.na(answer)] <- 0 
    answer 

    name Ai Ac Bi Bc Ci Cc Di Dc Fi 
1 a1 2 1 1 0 0 0 0 0 0 
2 a2 1 0 3 1 1 0 0 0 0 
3 a3 3 2 2 0 3 1 2 2 0 
4 a4 3 0 2 0 1 0 0 0 2 

BTW很好的想法與Reduce,這是很少的(至少對我來說)被使用一個漂亮的小功能。