Проблемы с ddply для расщепления большого количества категорий в R - PullRequest
3 голосов
/ 12 октября 2011

Я недавно задал вопрос о подсчете количества повторений элемента (http://stackoverflow.com/questions/7669553/how-to-assign-number-of-repeats-to-dataframe-based-on-elements-of-an-identifying/7669607#7669607) в большом фрейме данных. Я получил несколько очень полезных советов, которые работали с небольшим количеством строк, но теперь нужновыполнить операцию на гораздо большем уровне (более 255 тыс. строк, с помощью ddply формируется около 100 тыс. «групп»):

system.time( data <- ddply(data, "uid", function(x) {x$time <- 1:nrow(x); x}) ) #uid is the grouping variable, for which I need to count the number of repeats for output like

uid    time
ny1    1
ny1    2
ny2    1
ny2    2
ny2    3

Попытка выполнить эту операцию над большим набором данных приводит к удушению R из-запроблемы с памятью. Есть ли очевидные решения для этого? Спасибо заранее (особенно за терпение, так как я новый "программист").

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

Для действительно больших проблем, подобных этой, вы можете попробовать использовать data.table s вместо plyr:

library(data.table)
data <- data.table(data)

data[,transform(.SD,time = NROW(.SD)), by = uid]

, предполагая, что столбец time еще не существует.

Я все еще нахожусь в процессе обучения data.table, поэтому, когда я возиться с этим, кажется, что это может быть проще (и, возможно, быстрее):

data[,rep(.N, .N),by = uid]

.N появляется во внутренней переменной, котораяпредставляет количество строк в каждой подгруппе.

1 голос
/ 12 октября 2011

Я разместил новый ответ на ваш первоначальный вопрос здесь Как назначить количество повторений для кадра данных на основе элементов идентифицирующего вектора в R? .

Это, надеюсь, поможет вам там и здесь.

...