rxMerge用于因子级别

时间:2016-02-18 14:11:17

标签: r revolution-r merging-data

我是RRE的新手,我遇到了rxMerge功能的问题。

我想通过具有不同级别数的因子列合并两个xdf数据集。我希望内部联接只保留匹配级别。我收到以下错误:

  

错误:因子键'mat'的级别不匹配。调用rxFactors使级别相同,然后在输入文件上调用rxSort。

这是我的合并功能:

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

除了Derek所说的,您还可以使用dplyrXdf包来处理这些以及类似因素相关的问题。

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

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

*披露:我写了dplyrXdf。