Несколько замечаний.Пара вопросов SO посвящена тому, как выполнить поворот от высоты к ширине в Sql (ите): здесь и здесь .Я не рассматривал их слишком глубоко, но у меня сложилось впечатление, что делать это в SQL некрасиво, как, например, в вашем SQL-запросе необходимо явно указать все возможные ключи в запросе!(кто-то, пожалуйста, поправьте меня, если я ошибаюсь).Что касается data.table
, вы определенно можете выполнять групповые операции очень быстро, но я не понимаю, как вы можете на самом деле преобразовать результат в широкий формат.
Если вы хотите сделать это исключительно в R, я думаю, что tapply
здесь скорость, намного быстрее, чем acast
из reshape2
:
Создайте несколько высоких данных с помощьюнекоторые дыры в нем, чтобы убедиться, что код работает правильно:
tall <- data.frame( dt = rep(1:100, 100),
tkr = rep( paste('v',1:100,sep=''), each = 100),
value = rnorm(1e4)) [-(1:5), ]
> system.time( replicate(100, wide <- with(tall, tapply( value, list(dt,tkr), identity))))
user system elapsed
4.73 0.00 4.73
> system.time( replicate(100, wide <- acast( tall, tkr ~ dt)))
user system elapsed
7.93 0.03 7.98