У меня есть фрейм данных, как показано ниже (20 000 строк по 49 столбцов). Каждая строка имеет уникальное имя (ID), каждый идентификатор имеет 3 повторных чтения в 3 столбцах (например, D15C D15C.1 D15C.2). Первые 4 буквы столбцов («D15C») - это имена групп. Мне нужно усреднять столбцы по именам групп (например, средние D15C, D15C.1 и D15.2 для получения D15C), поэтому итоговая таблица будет консолидирована до 16 столбцов из 49 столбцов.R строк означает несколько столбцов по группам (или уникальным идентификаторам)
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 секунд, чтобы завершить , Проблема заключается в том, что у меня есть 100 из такого рода таблиц ожидания ......
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). В любом случае, есть ли более быстрый способ агрегирования данных? Очень ценим!
Первый вопрос, а? Добро пожаловать. Вы действительно имеете в виду data.table, как в пакете 'data.table'? Если вы попробовали 'transpose' и' aggregate', тогда лучше всего предоставить точные команды, которые вы пытались, чтобы люди могли помочь. Не знаю, что вы подразумеваете под «методом Data.table». Там, вероятно, есть некоторые рекомендации по заданию хороших вопросов о переполнении стека где-нибудь (но я не могу их быстро). Попробуйте комнату в R, чтобы попросить совета. –
Жаль, что все было неясно. Я отредактировал его, чтобы предоставить более подробную информацию. Надеюсь, теперь это станет понятным. – user1444754
Намного лучше, спасибо. Это очень быстро ответило. –