[英]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.Width
该Species
。 预期产量:
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.