【问题标题】:rxMerge for factored levelsrxMerge 因子水平
【发布时间】:2016-02-18 14:11:17
【问题描述】:

我是 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 号(带有字母,所以我不能将它们传递给数值)。

提前非常感谢

乌列尔

【问题讨论】:

    标签: r revolution-r merging-data


    【解决方案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)
    

    【讨论】:

    • 我已经在一个非常小的数据集上对其进行了测试,结果非常好,谢谢!但根据我的真实数据,rxFactors 函数需要数小时(300 万次观察)。没有办法优化这个?
    • 嗯。可能有一些方法可以优化。多少个因子水平? xdf 中的块有多大?有多少列?
    【解决方案2】:

    除了 Derek 所说的之外,您还可以使用 dplyrXdf 包,它将为您处理这些和类似的因素相关问题。

    devtools::install_github("RevolutionAnalytics/dplyrXdf")
    library(dplyrXdf)
    
    all_data_2015 <- inner_join(cible_2015_xdf, data_2015, by="mat")
    

    * 披露:我写了 dplyrXdf。

    【讨论】:

    • 我在使用inner_join 时遇到以下错误:if (types[nam] == "factor") list(newLevels = levs) else list(levels = levs) 中的错误:需要 TRUE/FALSE 的缺失值。 我试图通过具有不同因子级别的不同名称(使用 by = c("x" ="y"))的列连接两个 xdf。知道可能是什么吗?
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多