r - 在大型 ffdfs 上使用 apply

标签 r bigdata apply ff

基本思路是这样的:我有一个很大的ffdf (约 550 万 x 136 个字段)。我知道一个事实,即此数据框中的某些列的列都是 NA .我如何找出哪些并适本地删除它们?

我的直觉是做类似的事情(假设 dfffdf ):

apply(X=is.na(df[,1:136]), MARGIN = 2, FUN = sum)

这应该给我 NA 的矢量计数每一列,然后我可以找到哪些有 ~550 万 NA值,使用 df <- df[,-c(vector of columns)] 删除它们等。非常简单。

然而,apply给我一个错误。

Error: cannot allocate vector of size 21.6 Mb
In addition: Warning messages:
1: In `[.ff`(p, i2) :
  Reached total allocation of 3889Mb: see help(memory.size)
2: In `[.ff`(p, i2) :
  Reached total allocation of 3889Mb: see help(memory.size)
3: In `[.ff`(p, i2) :
  Reached total allocation of 3889Mb: see help(memory.size)
4: In `[.ff`(p, i2) :
  Reached total allocation of 3889Mb: see help(memory.size)

这告诉我 apply无法处理这种大小的数据框。我可以使用任何替代方案吗?

最佳答案

使用起来更容易all(is.na(column)) . sapply/lapply不工作因为和ffdf对象不是列表。

您使用 df[, 1:136]在你的代码中。这将导致 ff尝试将所有 136 列加载到内存中。这就是导致内存问题的原因。当您执行 df[1:136] 时不会发生这种情况.为最终结果编制索引时也会发生同样的情况:df <- df[,-c(vector of columns)]将所有选定的列读入内存。

na_cols <- logical(136)
for (i in seq_len(136)) {
  na_cols[i] <- all(is.na(df[[i]]))
}

res <- df[!na_cols]

关于r - 在大型 ffdfs 上使用 apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34022873/

相关文章:

重新排列数据框中的行

python - 如何将 Pandas 中的一列扩展为多列?

删除千位分隔符

python - Pandas DataFrame Apply 函数,多个参数

database - Yugabyte YSQL中的语句启用

python - 复制一些行并更改 Pandas 中的一些值

删除数据框中的镜像线

R:如何在列表中应用求和函数?

r - 如何将集合运算表达式编程为函数的参数?

python - 使用 Python 高效查找部分字符串匹配 --> 从 5 GB 文件中的值列表开始的值