У меня есть таблица MySQL, которая содержит данные о некоторых анализах, которые я делаю.Это выглядит так: таблица MySQL
Вот также примерный набор данных, соответствующий этой таблице:
species chrom pos strand ratio coverage context
X Y 64 + 0.25 12 TACGT
X Y 65 - 0.5 20 ACGTT
X Y 107 + 0.8 10 CCCGT
X Y 108 - 0.4 30 CCGTG
Как вы можете видеть, у меня в настоящее время есть таблица с7 полей.То, что я хочу сделать, это объединить все ячейки для «плюс» цепи с ячейками следующей «-» цепи.Затем я получу новую таблицу, которая содержит 6 полей (все, кроме поля прядей) и половину строк старой таблицы.Однако мне нужно пересчитать содержимое каждой ячейки в моей новой таблице на основе информации старой таблицы, содержащей информацию о цепях.
Таким образом, поля «разновидности» и «хром» содержат идентичную информацию для каждойячеек, которые будут объединены.Мне просто нужно сохранить один из двух.Для поля pos я могу хранить только информацию из цепочки "+".То же самое для поля "контекст".Однако для полей «охват» и «коэффициент» мне нужно выполнить расчеты.Поле «покрытие» будет содержать ячейки, которые будут суммой ячеек покрытия «+» и «-».Поле «коэффициент» будет рассчитываться с использованием следующей функции:
new_ratio = («коэффициент +» * «охват +» + «коэффициент-» * «охват») / «охват +» + «охват -»
Так что это будет функцией старых соотношений и покрытий.
Новая таблица должна выглядеть следующим образом:
species chrom pos ratio coverage context
X Y 64 0.40625 32 TACGT
X Y 107 0.5 40 CCCGT
Я успешно написал сценарий, который может создатьновая таблица в точности так, как я хочу, но она требует НАВСЕГДА (я делаю это в R)!
То, что я делаю, - это то, что я разделяю таблицу на два кадра данных, плюс-кадр данных и"минус" датафрейм.Затем я воссоздаю новую таблицу строка за строкой, выполняя вычисления, которые я описал выше.
Этот код действительно неэффективен, поскольку воссоздание новой таблицы занимает слишком много времени.У меня есть десятки миллионов записей в моей исходной таблице (:
Есть ли способ сделать это более эффективно, может быть, сочетая сразу созданные «плюс» и «минус» кадры данных, которые я создал, без необходимостиделать этот ряд за строкой?
Заранее спасибо за помощь!