0

我想count在 .xdf 文件中按 var1 区分 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 是更快的方法

4

2 回答 2

3

另一种选择是使用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)
于 2016-03-31T20:44:55.620 回答
1

按 拆分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/summarise 管道(基本上可以完成上述所有操作,包括在必要时转换为因子):

xdf %>% group_by(var1) %>%
    summarise(distinct=n_distinct(var2),
              .rxArgs=list(varsToKeep=c("var1", "var2")))
于 2016-03-31T14:20:08.973 回答