Я хотел бы агрегировать data.frame
с помощью переменной идентификатора, называемой ensg
. Фрейм данных выглядит следующим образом:
chromosome probeset ensg symbol XXA_00 XXA_36 XXB_00
1 X 4938842 ENSMUSG00000000003 Pbsn 4.796123 4.737717 5.326664
Я хочу вычислить среднее значение для каждого числового столбца по строкам с таким же значением ensg
. Проблема здесь в том, что я хотел бы оставить нетронутыми другие переменные идентичности - хромосому и символ, поскольку они одинаковы для того же Ensg
.
В конце я хотел бы получить data.frame
с идентификационными столбцами , хромосома
, ensg
, символ
и среднее значение числовые столбцы над строками с тем же идентификатором. Я реализовал это в ddply
, но он очень медленный по сравнению с aggregate
:
spec.mean <- function(eset.piece)
{
cbind(eset.piece[1,-numeric.columns],t(colMeans(eset.piece[,numeric.columns])))
}
t
mean.eset <- ddply(eset.consensus.grand,.(ensg),spec.mean,.progress="tk")
Моя первая агрегированная реализация выглядит так,
mean.eset=aggregate(eset[,numeric.columns], by=list(eset$ensg), FUN=mean, na.rm=TRUE);
и намного быстрее. Но проблема с агрегатом
заключается в том, что мне нужно повторно присоединить описывающие переменные. Я не понял, как использовать мою пользовательскую функцию с агрегатом
, поскольку агрегат
не передает фреймы данных, а только векторы.
Есть ли элегантный способ сделать это с помощью aggregate
? Или есть более быстрый способ сделать это с помощью ddply
?