Агрегирование значений во фрейме данных на основе ключа

У меня есть фрагмент кода агрегации, который работает достаточно хорошо, но работает немного медленно с кадром данных с 10e6 строками. Я не настолько опытен в R, поэтому приношу свои извинения за мой достойный передергивания код!

Я просто хочу сделать базовую сводку и суммировать значения для общего ключа ...

например, перейти от ...

  key val
1   a   5
2   b   7
3   a   6

к ...

  key val
1   a   11
2   b   7

лучшее, что я могу сделать, это ...

keys = unique(inp$key)
vals = sapply(keys, function(x) { sum(inp[inp$key==x,]$val) })
out = data.frame(key=keys, val=vals)

Я интуитивно чувствую, что inp [inp $ key == x,] - не лучший способ. Есть ли очевидное ускорение, которое мне не хватает? Я могу сделать это в Hadoop (поскольку набор данных 10e6 на самом деле уже представляет собой свертку из набора данных строки 2e9), но я пытаюсь улучшить свой R.

Ура, Мат

9
задан mat kelcey 25 July 2011 в 05:23
поделиться