2016-02-18 125 views
1

我是RRE的新手,我遇到了rxMerge函數的問題。rxMerge因子水平

我想合併兩個xdf數據集的因子列有不同數量的級別。我想要一個內部連接只保留匹配的級別。我得到以下錯誤:

ERROR: Factor key 'mat' has mismatched levels. Call rxFactors to make the levels the same, then call rxSort on the input files.

這裏是我的合併功能:

rxMergeXdf(inFile1 = cible_2015_xdf, inFile2 = data_2015, 
     outFile = all_data_2015, 
     matchVars = "mat", 
     type = "inner", 
     varsToDrop2 = "ref", 
     overwrite=TRUE 
     ) 

我已經看到了與始發地和目的地航班的通知(http://www.revolutionanalytics.com/sites/default/files/data-step-white-paper.pdf)個例,但我想我的輸出只有匹配級別的數量。我在兩個數據集中都有獨特的級別,級別是ID號(帶有字母,因此我無法將它們傳遞給數字值)。

感謝很多提前

Ouriel

回答

1

您將需要重新水平的因素有相同的水平合併之前。

new_levels <- unique(c(rxGetVarInfo(cible_2015_xdf, varsToKeep = "mat")[[1]][["levels"]], 
         rxGetVarInfo(data_2015, varsToKeep = "mat")[[1]][["levels"]])) 

rxFactors(inData = cible_2015_xdf, outFile = cible_2015_xdf, 
      factorInfo = list(mat = list(newLevels = new_levels)), 
      overwrite = TRUE) 
rxFactors(inData = data_2015, outFile = data_2015, 
      factorInfo = list(mat = list(newLevels = new_levels)), 
      overwrite = TRUE) 

rxMergeXdf(inFile1 = cible_2015_xdf, inFile2 = data_2015, 
      outFile = all_data_2015, 
      matchVars = "mat", 
      type = "inner", 
      varsToDrop2 = "ref", 
      overwrite=TRUE) 
+0

我已經在一個非常小的數據集上測試過它,它工作的很棒!但根據我的實際數據,rxFactors函數需要幾小時(300萬觀察值)。沒有辦法來優化這個? –

+0

嗯。可能有一些方法可以優化。多少個因子水平? xdf中的塊有多大?多少列? –

1

除了什麼德里克說,你也可以使用dplyrXdf包將處理這些和其他類似因素相關的問題爲您服務。

devtools::install_github("RevolutionAnalytics/dplyrXdf") 
library(dplyrXdf) 

all_data_2015 <- inner_join(cible_2015_xdf, data_2015, by="mat") 

*披露:我寫了dplyrXdf。

+0

使用'inner_join'時遇到以下錯誤: ** if(types [nam] ==「factor」)list(newLevels = levs)else list(levels = levs)中的錯誤:缺少值其中TRUE/FALSE needed。** 我試圖通過不同名稱的列(使用by = c(「x」=「y」)')連接兩個xdfs,並使用不同的因子級別。任何想法可能是什麼? – quartin