2016-08-18 2 views
1

У меня есть столбец, и в этой колонке у меня есть около 5-10 экземпляров каждая из нескольких сотен тысяч разных строк. Я хочу посчитать их, а затем поместить счеты в соответствующие строки. Так что я:Требования к памяти ddply, решения

newdf <- ddply(oldDF, ~BigVariable, transform, counts = length(BigVariable)) 

Это работает нормально, пока я не начну приближаться к 1 миллиону строк/1GB размер файла. Моя сессия R сбойная с ошибкой каждый раз с набором данных такого размера или больше. Однако с 28 ГБ свободной памяти я не понимаю, почему это должно быть проблемой, но мое понимание от this thread состоит в том, что ddply иногда может быть памятью.

Я уверен, что это проблема с памятью, потому что перед сбоем на моем системном мониторе я вижу измененную память и использую память, сражающуюся за свободную память, до тех пор, пока зеленый бар не победит и не примет последний бит, с R сбой в тот же момент.

  • Я сделал очевидный и используемый data.table для более эффективного использования памяти.
  • В одной переменной имеется огромное количество факторов. Я попытался изменить оскорбительную переменную персонажу в надежде, что он будет лучше использовать data.table, но не кубики.

Что еще я должен попробовать? Есть ли более эффективный способ памяти для подсчета и поместить их во все соответствующие строки?

ответ

2

dplyr - лучшая альтернатива ddply, так как она может быть более эффективной.

library(dplyr) 
oldDF %>% 
    group_by(BigVariable) %>% 
    mutate(counts = n()) 

Или с data.table

library(data.table) 
setDT(oldDF)[, counts := .N, by = BigVariable] 
+0

Первое решение завершенного без сбоев, но дал мне NULL. Второе, похоже, хорошо работает. Теперь, чтобы увидеть, насколько большой набор данных я могу подтолкнуть. Благодаря! – Thoughtcraft

+1

@JamesHanks Выход NULL вызывает недоумение. Вы пробовали это на новой сессии. – akrun

+1

Теперь они оба работают. Благодаря! – Thoughtcraft