繁体   English   中英

使用ffdfdply拆分数据并获取拆分中每个ID的特征

[英]using ffdfdply to split data and get characteristics of each id in the split

在R中,我使用ffdf处理大型数据集。 我想使用ffdfdply包中的ffbase根据某个变量(var)拆分数据,然后使用var的唯一值为所有观测值计算一些特征(例如:var的每个唯一值的观测值数量)。 为了查看使用ffdfdply是否可行,我执行了以下示例。

我预计它会分裂每个物种,然后计算最小Petal.Width每个Species ,然后返回一个每两列三个条目列出Species和最小Petal.WidthSpecies 预期产量:

  Species    min_pw
1 setosa     0.1       
2 versicolor 1.0       
3 virginica  1.4  

但是,对于BATCHBYTES=5000 ,它将使用两个拆分,一个拆分包含两个种类,另一个拆分包含一个种类。 结果如下:

  Species   min_pw
1 setosa    0.1      
2 virginica 1.4    

当我将BATCHBYTES更改为2000时,这将强制ffdfdply使用三个拆分,从而导致上面发布的预期输出。 但是我想有另一种方法来强制拆分成分配给'split'的变量的每个唯一值。 有什么办法可以做到这一点? 还是您有其他建议来获得我需要的结果?

ffiris <- as.ffdf(iris)
result <- ffdfdply(x = ffiris,
                   split = ffiris$Species,
                   FUN = function(x) {
                      min_pw <- min(x$Petal.Width)
                      data.frame(Species=x$Species, min_pw= min_pw)
                   },
                   BATCHBYTES = 5000,
                   trace=TRUE
)
dim(result)
dim(iris)
result

ffdfdply函数是在有许多拆分元素的情况下设计的,例如,当您有1000000个客户时,如果您希望内存中的数据至少按客户拆分,但如果您的RAM允许这样的话,可能会有更多客户拆分,则内部不需要这样做。约1000000次。 这就是为什么ffdfdply的文档指出:

请确保您的FUN涵盖了以下事实:在应用FUN的一个数据块中可以包含多个拆分元素。 因此,针对您的问题的解决方案是将其涵盖在FUN中,如下所示:

FUN=function(x){
  require(doBy)
  summaryBy(Petal.Width ~ Species, data=x, keep.names=TRUE, FUN=min)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM