Я пытаюсь отфильтровать низкочастотные факторы в наборе данных. Проблема выглядит примерно так:Каков самый быстрый способ получить частоту фактора в R?
require(digest)
require(ff)
require(ffbase)
test.vector.ffdf = as.ffdf(as.ff(as.factor(sample(sapply(1:1000, digest), 50000000, replace = T))))
get.frequency=function(i,column){
freq = sum(test.vector.ffdf[,column] == i)/length(test.vector.ffdf[,column])
print(paste0(i,' ',freq))
freq
}
column = 1
sapply(unique(test.vector.ffdf[,column]),get.frequency, column = column)
Как вы можете видеть, это занимает очень много времени, и у меня есть несколько столбцов, чтобы сделать это с тысячами факторов. Есть ли способ получить частоты намного быстрее?
Разъяснение: в этом примере, печать() в функции только видеть прогресс и sapply будет использоваться, чтобы получить список частот, которые можно было бы действовал на то [я где частота < 0,001]
Я думаю, что вы ищете 'table()'. – eipi10
Я бы попробовал таблицу (as.data.frame (test.vector.ffdf)) – user3969377
Спасибо, ребята. Я разместил его в форме ответа, так как он работал хорошо. @ user3969377, пакет ('ffbase') перегружает таблицу для работы с ffdfs. Я действительно пытался избежать конвертирования в фрейм данных, так как это делает все в памяти, что абсолютно огромно. –