1

我是 ScaleR/RevoR 的新手——我有一个 .xdf 数据集,它有 400 多个“部分”,每个部分都有 70000 个数值......所以数据集相当大 > 4000 万行。我想使用 RevoR 给我每个“部分”的中值和模式...我可以使用 rxSummary 获得平均值和标准偏差..?但是如何计算众数和中位数..?

此外,一旦我有一个包含 400 多行的汇总 .xdf 文件,其中包含该部件、模式和中位数 ..如何将其转换回内存中的数据帧 ..?我一直在尝试 rxReadXdf 并收到此错误:

rxLocateFileInternal 中的错误(文件,pathsToSearch,fileSystem,isOutFile = isOutFile,:在路径中找不到总和。;工作目录是:/seamnt/sasdata-stage/RStudio/Workspaces/myname

任何帮助将不胜感激..保罗。

4

1 回答 1

4

目前,您无法从rxCubeor中获取众数和中位数rxSummary

一种解决方法是按“部分”拆分数据集,将每个部分转换为数据框,然后使用标准 R 函数获取模式/中值。代码将如下所示:

# split the data by 'part' variable (which has to be a factor)
xdfList <- rxSplit(baseXdf, outFilesBase="base", splitByFactor="part")

smry <- rxExec(function(xdf) {
        df <- rxImport(xdf)
        # median of a numeric variable
        xmed <- median(df$x)
        # mode of a factor variable
        ftab <- table(df$f)
        fmode <- names(ftab)[which.max(ftab)]
        data.frame(part=as.character(df$part), xmed=xmed, fmode=fmode)
    }, xdf=rxElemArg(xdfList))

smry <- do.call(rbind, smry)

或者,如果您有dplyrXdf 包,您可以利用dplyr::summarise为您计算中位数(如果不是众数):

baseXdf %>% group_by(part) %>%
    summarise(xmed=median(x))

免责声明:我是 dplyrXdf 的作者。

于 2015-10-22T09:31:31.683 回答