在 rxSummary 中计数不同
Count distinct in a rxSummary
我想 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 是更快的方法
按 var1
拆分,然后为每个组计算 var2
的唯一值。这假设 var1
和 var2
是因素,如果不是,你必须先 运行 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 package 并使用 dplyr group_by/summarise 管道(基本上完成上述所有操作,包括必要时转换为因数):
xdf %>% group_by(var1) %>%
summarise(distinct=n_distinct(var2),
.rxArgs=list(varsToKeep=c("var1", "var2")))
另一种选择是使用 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)
我想 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 是更快的方法
按 var1
拆分,然后为每个组计算 var2
的唯一值。这假设 var1
和 var2
是因素,如果不是,你必须先 运行 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 package 并使用 dplyr group_by/summarise 管道(基本上完成上述所有操作,包括必要时转换为因数):
xdf %>% group_by(var1) %>%
summarise(distinct=n_distinct(var2),
.rxArgs=list(varsToKeep=c("var1", "var2")))
另一种选择是使用 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)