2013-07-23 3 views
3

У меня есть набор данных (600 Мб с наблюдениями 5038720) о микро-блогах, и я попытался выяснить, сколько твитов (твитов с одинаковой серединой считается одним) час. Вот как набор данных выглядит следующим образом:R 'aggregate' исчерпывает память

head(mydata) 

     uid    mid year month date hour min sec 
1738914174 3342412291119279 2011  8 3 21 4 12 
1738914174 3342413045470746 2011  8 3 21 7 12 
1738914174 3342823219232783 2011  8 5 0 17 5 
1738914174 3343095924467484 2011  8 5 18 20 43 
1738914174 3343131303394795 2011  8 5 20 41 18 
1738914174 3343386263030889 2011  8 6 13 34 25 

и вот мой код:

count <- function(x) { 
length(unique(na.omit(x))) 
} 
attach(mydata) 
hourPost <- aggregate(mid, by=list(uid, hour), FUN=count) 

Он повешен там около получаса, и я обнаружил, что использовалась вся настоящая память (24 Gb) и он начал использовать виртуальную память. Любая идея, почему эта маленькая задача потребляет столько времени и памяти, и как мне ее улучшить? Заранее спасибо!

ответ

5

Использование пакета data.table:

mydata <- read.table(text="  uid    mid year month date hour min sec 
1738914174 3342412291119279 2011  8 3 21 4 12 
1738914174 3342413045470746 2011  8 3 21 7 12 
1738914174 3342823219232783 2011  8 5 0 17 5 
1738914174 3343095924467484 2011  8 5 18 20 43 
1738914174 3343131303394795 2011  8 5 20 41 18 
1738914174 3343386263030889 2011  8 6 13 34 25", 
header=TRUE, colClasses = c(rep("character",2),rep("numeric",6)), 
stringsAsFactors = FALSE) 

library(data.table) 
DT <- data.table(mydata) 
DT[, length(unique(na.omit(mid))), by=list(uid,hour)] 

aggregate принуждают группировка переменных на факторы, которые, вероятно, ест память (я предполагаю, что у вас есть много уровней uid).

Может быть больше возможностей для оптимизации, но вы не представите репрезентативный тестовый пример.

+0

Большое спасибо! Я просто сделал то, что вы предложили, и потребовалось меньше минуты, чтобы вернуть результат! – leoce

+3

Вот удивительное чудо, которое является data.table. – Roland

Смежные вопросы