【问题标题】:R function for a vector向量的 R 函数
【发布时间】:2012-04-16 23:16:44
【问题描述】:

我有一个数据框,我试图采用一个因子变量,只保留前 31 个级别,并使所有其他级别成为通用级别。

我需要跨多个向量执行此操作,所以我想我会创建函数,但我运气不佳。我想我需要以某种方式使用mapplyVectorize,但我认为我做得不对,因为我收到有关无法分配 3.6 gigs 内存的错误消息。

这是函数,其中 x 是向量,topCount 是要保留的层数

createFactor <-function(x, topCount){
    table1 <- data.frame(table(x))
    table1 <- table1[order(-table1$Freq),]
    noChange <- table1$Var1[1:topCount]
    newVals1 <- factor(ifelse(x %in% noChange, x, "-1000"))
    newVals1
}

我希望能够写出这样的东西:

df1$topLevels <- createFactor(df1$fact1, 31)

有什么建议吗?

【问题讨论】:

    标签: r function


    【解决方案1】:

    我不完全确定它的性能特征,但我可能会写这个函数更像这样:

    topK <- function(x,k){
        tbl <- tabulate(x)
        names(tbl) <- levels(x)
        x <- as.character(x)
        levelsToKeep <- names(tail(sort(tbl),k))
        x[!(x %in% levelsToKeep)] <- '-1000'
        factor(x)
    }
    

    我使用 tabulate 而不是 table 的地方,因为我怀疑它可能更快(这在你的情况下似乎很重要),尽管我还没有测试过它实际上会快多少。

    【讨论】:

    • 做到了。非常感谢。
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多