У меня есть фрейм данных, как показано ниже (20 000 строк по 49 столбцов). Каждая строка имеет уникальное имя (ID), каждый ID имеет 3 повторения чтения в 3 столбцах (например, D15C D15C.1 D15C.2). Первые 4 буквы имен столбцов ("D15C") являются именами групп. Мне нужно усреднить столбцы по именам групп (например, усреднить D15C, D15C.1 и D15.2, чтобы получить D15C), поэтому итоговая таблица будет объединена в 16 столбцов из 49 столбцов.
ID D04C D04C.1 D08H D08H.1 D08H.2 D15C D15C.1 D15C.2 D15L D15L.1 D15L.2
1 1367452_at 11.11 10.93 11.85 10.94 10.87 10.73 10.62 10.85 10.73 10.77 10.52
2 1367453_at 9.65 9.94 9.78 9.68 9.67 9.86 9.71 9.82 9.74 9.71 9.76
3 1367454_at 10.19 10.36 9.68 10.07 10.08 10.35 10.26 10.32 10.27 10.19 10.47
(… 20000 rows)
Я транспонировал и отредактировал его в следующий фрейм данных, чтобы использовать агрегат:
ID 1367452_at 1367453_at 1367454_at ... ...
1 D04C 11.11 9.65 10.19
2 D04C 10.93 9.94 10.36
3 D08H 11.85 9.78 9.68
4 D08H 10.94 9.68 10.07
5 D08H 10.87 9.67 10.08
6 D15C 10.73 9.86 10.35
7 D15C 10.62 9.71 10.26
8 D15C 10.85 9.82 10.32
9 D15L 10.73 9.74 10.27
10 D15L 10.77 9.71 10.19
11 D15L 10.52 9.76 10.47
Но следующий агрегат ("agg" — это имя фрейма данных) занял 370 секунд. Проблема в том, что у меня есть сотни подобных таблиц......
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
Итак, я преобразовал ее в data.table и запустил метод таблицы данных.
dt <- as.data.table(agg)
setkey(dt, ID)
dt2 <- dt[,lapply(list(dt[2:ncol(dt)]),mean),by = ID]
, но через несколько минут получил сообщение об ошибке:
Error: cannot allocate vector of size 144 Kb
In addition: Warning messages:
1: Reached total allocation of 1535Mb: see help(memory.size)
2: Reached total allocation of 1535Mb: see help(memory.size)
Не уверен, что не так. Не могу использовать dt[1:5,1:5], чтобы увидеть «голову» части dt, а head(dt) возвращает слишком много строк, которые проходят через крышу. Я тоже не вижу «головы». Не знаю, что теперь делать.
Я могу перечислить идентификаторы в одном столбце (как в data.frame) или перенести таблицу и перечислить идентификаторы в первой строке (как в data.table).В любом случае, есть ли более быстрый способ агрегировать данные? Очень ценю!