2016-03-31 6 views
0

ich count verschiedenen Werten von var2 Gruppierung will von var1 in einer .xdf Datei,Count verschieden in einem rxSummary

Ich habe versucht, so etwas wie diese

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) 

Vielen Dank im Voraus

EDIT :

Wahrscheinlich mit RevoPemaR ist der schnellere Weg

Antwort

3

Eine andere Option zu verwenden ist rxCrossTabs. Auf diese Weise erhalten Sie eine Kreuztabellierung der beiden Faktoren, und Sie können nur Nicht-Null-Einträge zählen, um eindeutige Werte anhand eines der Faktoren zu bestimmen.

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) 
+0

Dies ist eine bessere Antwort. –

1

Split von var1, und dann für jede Gruppe, zählen Sie die eindeutigen Werte von var2. Dies setzt voraus, dass var1 und var2 Faktoren sind, wenn nicht, müssen Sie zuerst rxFactors ausführen.

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) 

Oder Sie könnten meine dplyrXdf package und verwenden Sie einen dplyr group_by/zusammenzufassen Pipeline (die im Grunde macht die ganze oben, einschließlich Faktoren bei Bedarf Umwandlung) erhalten:

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