Более быстрая альтернатива doBy / summaryBy - PullRequest
3 голосов
/ 21 января 2012

В настоящее время я использую команду summaryBy из пакета doBy для группировки строк фрейма данных по определенным функциям.Это отлично работает.НО:

Пакет doBy загружается очень медленно, я думаю, потому что он импортирует различные другие пакеты.Загрузка doBy занимает около 3 секунд.Мне нужна только простая функция summaryBy из этого пакета.

Есть ли возможность ускорить время загрузки пакета или есть альтернативная реализация, которая не загружает такой огромный пакет?

Ответы [ 3 ]

15 голосов
/ 21 января 2012

Для объединения больших наборов данных со сложными функциями трудно превзойти пакет data.table . Например, вот как вы бы суммировали mean и sd из Sepal.Length для набора данных радужной оболочки:

require(data.table)
dat <- data.table(iris)
dat[,list(mean=mean(Sepal.Length), sd=sd(Sepal.Length)),by=Species]

Библиотека загружается быстро, она занимает всего 1 строку кода (2, если считать, что ваш data.frame конвертируется в data.table), и это очень быстро. Что еще можно хотеть?

6 голосов
/ 21 января 2012

Вы можете получить более высокую производительность, просто используя парадигму base-R lapply(split(.)) с нужными вам функциями.

 dat <- structure(list(category = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", 
"B", "C"), class = "factor"), year = c(2000, 2001, 2004, 2005, 
2009, 2010, 2000, 2001, 2004, 2005, 2009, 2010, 2000, 2001, 2004, 
2005, 2009, 2010), incidents = c(7, 4, 4, 2, 3, 1, 6, 3, 5, 2, 
2, 5, 2, 1, 4, 4, 2, 1)), .Names = c("category", "year", "incidents"
), row.names = c(NA, -18L), class = "data.frame")

split(dat, dat$category)
lapply( split(dat[-1], dat$category), summary)
3 голосов
/ 22 января 2012

1) Вместо установки пакета doBy попробуйте поискать summaryBy.R и orderBy.R из исходного пакета doBy:

setwd("doBy/R")
source("summaryBy.R")
source("orderBy.R")

summaryBy(...whatever...)

или

2) удалить все файлы в пакете, кроме файла DESCRIPTION, каталога R и этих двух исходных файлов (удалить все остальные файлы .R), удалить строки Depends: и Imports: из файла DESCRIPTION (при необходимости изменить пакет) : укажите в ОПИСАНИИ другое имя), а затем пересоберите и установите новый урезанный пакет. (Другая возможность - оставить все файлы в пакете и просто удалить строки Depends: и Imports: из файла DESCRIPTION, но это не будет загружаться так быстро, как удаление почти всего).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...