Я пытаюсь объединить (консолидировать) таблицу, полученную в результате использования rbind для объединения нескольких фреймов данных. Мне нужно объединить строки с одинаковыми значениями в нескольких столбцах и суммировать их количество.
Для упрощения я показываю образец таблицы.
count freq cdr3nt cdr3aa v d j VEnd DStart DEnd JStart
1. 5344 0.160 TGGGTCAACTAA CASSQRD TRBV14 TRBD1 TRBJ2-1 18 -1 18 27
2. 245 0.022 TGGACTAATCAG CAQSTRTT TRBV27-1 TRBD2 TRBJ2-5 12 17 -1 19
3. 120 0.010 TAGGGAGGC CASTT TRBV7-2 TRBD1 TRBJ1-5 10 19 -1 34
4. 102 0.010 TGGACTAATCAG CAQSTRTT TRBV27-1 TRBD2 TRBJ2-5 12 17 -1 19
5. 52 0.001 TGGGTCAACTAA CASSQRD TRBV14 TRBD1 TRBJ2-1 18 -1 18 27
6. 51 0.001 TGCGGGAA CGSSST TRBV4-3 TRBD2 TRBJ1-3 27 10 26 24
Если столбцы для cdr3nt, cdr3aa, v, d, j, VEnd, DStart, DEnd и JStart имеют одинаковые значения, значения счетчиков для этих столбцов должны суммироваться, и только одна строка должна отображаться с информацией. Кроме того, мне нужно будет пересчитать значения частоты для строк, объединенных, путем деления результирующего числа на общую сумму значений для таблицы. Получившаяся таблица должна выглядеть следующим образом:
count freq cdr3nt cdr3aa v d j VEnd DStart DEnd JStart
5396 0.18 TGGGTCAACTAA CASSQRD TRBV14 TRBD1 TRBJ2-1 18 -1 18 27
347 0.034 TGGACTAATCAG CAQSTRTT TRBV27-1 TRBD2 TRBJ2-5 12 17 -1 19
120 0.010 TAGGGAGGC CASTT TRBV7-2 TRBD1 TRBJ1-5 10 19 -1 34
51 0.001 TGCGGGAA CGSSST TRBV4-3 TRBD2 TRBJ1-3 27 10 26 24
Строки 1. и 5. были объединены, а также строки 2. и 4. Их количество было добавлено, и частота была пересчитана. В реальной версии может быть более двух строк с одинаковыми значениями.
Я начал со следующего фрагмента кода, пытаясь использовать агрегатную функцию, но сразу столкнулся с проблемами. Я даже не удосужился сделать новый расчет частоты.
samrep1 <- read.table("/Data/tables_merge/JB-3_R1.txt", header=TRUE, sep="\t")
samrep2 <- read.table("/Data/tables_merge/JB-3_R2.txt", header=TRUE, sep="\t")
samrep3 <- read.table("/Data/tables_merge/JB-3_R3.txt", header=TRUE, sep="\t")
samrep4 <- read.table("/Data/tables_merge/JB-3_R4.txt", header=TRUE, sep="\t")
table2 <- rbind(samrep1, samrep2)
table3 <- rbind(table2, samrep3)
table4 <- rbind(table3, samrep4)
agg_table <- aggregate(table4, by=list(table4$cdr3nt), FUN = sum)
Любая помощь будет принята с благодарностью.