0

我有一个大约 25L 行的大型数据集,其中应用了这个函数“状态”。它是一个标记程序。在 fn 内部,操作被矢量化并使用应用函数。c1-c4 是我数据中的列。执行 fn 仍然需要大约 5-6 小时。

status(mydata)
status <- function (x) {  

x<- subset(x, x$RECORD_TYPE != "INPUT")
x$c1<- as.character(x$c1)
x$c2 <- as.factor(x$c2)
x$c3 <- as.factor(x$c3)
return ( data.frame(cbind( 
         tapply(x$c2,  x$c4, 
           function (x) ifelse (!(any(x=="BAD")), "G", sum(x== "BAD"))) ,
         tapply(x$c2D,  x$c4, 
            function (x) sum (x== "NEG"))  ))) 
                 }  

有什么办法可以进一步加快fn. 我在一个有 16 个内核的服务器上工作。所以我相信它可以进一步加速。

4

1 回答 1

0

也许一种data.table方法比尝试并行化您的代码更快,但我需要您的数据样本以确保此答案解决您的问题:

library(data.table)

setDT(mydata)

mydata[ RECORD_TYPE != "INPUT", 
                   .(var1 = ifelse (!(any(c2=="BAD")), "G", sum(c2== "BAD")),
                     var2 = sum (c2D== "NEG")), by= c4]
于 2016-06-21T13:44:11.513 回答