R函数用于向量

时间:2012-04-16 23:16:45

标签: r function

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

我需要在几个向量中执行此操作,所以我想我会创建函数,但我没有太多运气。我想我需要以某种方式使用mapplyVectorize,但我认为我没有正确地执行此操作,因为我收到有关无法分配3.6 GB内存的错误消息。

这是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)

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我不完全确定这个的性能特征,但我可能更喜欢写这个函数:

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,因为我怀疑它可能更快(这在你的情况下看起来很重要)虽然我没有测试过它看看实际上会有多快是