У меня большой массив данных с сотнями столбцов.Я хотел бы использовать dplyr для добавления нового столбца в этот набор данных с результатами математического преобразования.
Это набор данных протеомики, в котором я запустил несколько миксов TMT для массовой спецификации одновременно (эта деталь не имеет значения, но может быть полезна для людей, которые знакомы с данными LC-MS / MS).Из-за этого у меня есть несколько столбцов, помеченных как «интенсивность репортера [0-10] партия [1-7]», у меня также есть столбцы «партия iBAQ [1-7]».
Для каждого столбца интенсивности репортера [0-10] каждой партии, я хочу создать новый столбец с результатом этого преобразования:
(значение ячейки) x (iBAQ пакета) / (сумма каждой ячейки в строке изта же партия)
Исходные данные выглядят так:
dat <- structure(list(RIC.1.batch.1 = 1:2, RIC.2.batch.1 = c(3L, 5L),
RIC.1.batch.2 = 4:3, RIC.2.batch.2 = 5:4, iBAQ.batch.1 = c(12L,
15L), iBAQ.batch.2 = c(13L, 17L)), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"))
# A tibble: 2 x 6
RIC.1.batch.1 RIC.2.batch.1 RIC.1.batch.2 RIC.2.batch.2 iBAQ.batch.1 iBAQ.batch.2
<int> <int> <int> <int> <int> <int>
1 1 3 4 5 12 13
2 2 5 3 4 15 17
И я хотел бы добавить столбцы, подобные этому, добавленные в таблицу с помощью mutate:
iBAQfrac1batch1|iBAQfrac2batch1|iBAQfrac1batch2|iBAQfrac2batch2
3.00 9.00 5.78 7.22
4.29 10.71 7.29 9.71
Я не могу придумать разумного способа написать функцию, которая сопоставляет каждую строку интенсивности репортера каждой партии со столбцом iBAQ той же самой партии, без простой группировки всех столбцов вручную.Я просто хочу сделать это более разумным способом, чтобы в дальнейшем, если бы у меня были данные с переменным числом каналов интенсивности репортера, я мог бы все же прогнать кадр данных через один и тот же код, не подвергая его воздействию.
Могу ли я написать цикл for, где я бы сказал, что для каждого столбца интенсивности репортера, заканчивающегося на n, выполняется ли преобразование с iBAQ, заканчивающимся тем же значением n?