Основная идея такова: у меня есть большое ffdf
(около 5,5 миллионов x 136 полей). Я точно знаю, что некоторые из этих столбцов в этом фрейме данных имеют столбцы, которые все NA
. Как мне узнать, какие из них и удалить их соответствующим образом?
Мой инстинкт состоит в том, чтобы сделать что-то вроде (при условии, что df
это ffdf
):
apply(X=is.na(df[,1:136]), MARGIN = 2, FUN = sum)
который должен дать мне вектор количества NA
для каждого столбца, а затем я мог бы найти, какие из них имеют ~ 5,5 миллиона значений 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
не может обрабатывать фрейм данных такого размера. Есть ли альтернативы, которые я могу использовать?
df[, !colSums(is.na(df[,1:136]))==nrow(df)]
? - person zx8754   schedule 01.12.2015colSums
вместо этого (см. Мое предыдущее редактирование)? В любом случае, я все еще получаю ту же ошибку. - person Clarinetist   schedule 01.12.2015names
. - person Clarinetist   schedule 01.12.2015