计算一个rxSummary不同(Count distinct in a rxSummary)

2019-11-04 04:30发布

我想count通过VAR1在.xdf文件VAR2分组的不同的值,

我想是这样的

 myFun <- function(dataList) {
    UniqueLevel <<- unique(c(UniqueLevel, dataList$var2))
    SumUniqueLevel <<- length(UniqueLevel)
    return(NULL)
    }

rxSummary(formula = ~ var1,
data = "DefModelo2.xdf",
transformFunc = myFun,
transformObjects = list(UniqueLevel = NULL),
removeZeroCounts = F)

先感谢您

编辑:

可能使用RevoPemaR是更快的方式

Answer 1:

另一种选择是使用rxCrossTabs 。 这样,您就得到了两个因素的交叉列表,你可以仅计算非零项由一个因素决定的唯一值。

censusWorkers <- file.path(rxGetOption("sampleDataDir"), "CensusWorkers.xdf")
censusXtabAge <- rxCrossTabs(~ F(age):F(wkswork1), data = censusWorkers, 
                             removeZeroCounts = FALSE, returnXtabs = TRUE)
apply(censusXtabAge != 0, MARGIN = 1, sum)


Answer 2:

通过拆分var1 ,然后为每个组,计数的唯一值var2 。 这假定var1var2的因素,如果他们不,你必须运行rxFactors第一。

xdflst <- rxSplit(xdf, splitByVars="var1", varsToKeep=c("var1", "var2"))

out <- rxExec(function(grp) {
        var1 <- head(grp, 1)$var1
        var2 <- rxDataStep(grp, varsToKeep="var2")$var2
        data.frame(var2, distinct=length(unique(var2)))
    },
    grp=rxElemArg(xdflst))

do.call(rbind, out)

或者你可以让我dplyrXdf包 ,并使用dplyr GROUP_BY /总结管道(这基本上完成了所有上述情况,包括转换如有必要因素):

xdf %>% group_by(var1) %>%
    summarise(distinct=n_distinct(var2),
              .rxArgs=list(varsToKeep=c("var1", "var2")))


文章来源: Count distinct in a rxSummary