Я пытаюсь рассчитать соотношение, используя эту формулу: log2(_5p/3p).
У меня есть фрейм данных в R, и записи имеют одно и то же имя, за исключением их последней части, которая будет либо _3p, либо _5p. Я хочу выполнить эту операцию log2(_5p/_3p) для каждого конкретного имени.
Например, для первых двух строк результат будет таким:
LQNS02277998.1_30988 log2 (40/148) = -1,887525
В идеале я хочу создать новый фрейм данных с результатами, в которых сохраняется только общая часть имени.
LQNS02277998.1_30988 -1.887525
Как я могу сделать это в R?
> head(dup_res_LC1_b_2)
# A tibble: 6 x 2
microRNAs n
<chr> <int>
1 LQNS02277998.1_30988_3p 148
2 LQNS02277998.1_30988_5p 40
3 Dpu-Mir-279-o6_LQNS02278070.1_31942_3p 4
4 Dpu-Mir-279-o6_LQNS02278070.1_31942_5p 4
5 LQNS02000138.1_777_3p 73
6 LQNS02000138.1_777_5p 12
structure(list(microRNAs = c("LQNS02277998.1_30988_3p",
"LQNS02277998.1_30988_5p", "Dpu-Mir-279-o6_LQNS02278070.1_31942_3p",
"Dpu-Mir-279-o6_LQNS02278070.1_31942_5p", "LQNS02000138.1_777_3p",
"LQNS02000138.1_777_5p"), n = c(148L, 40L, 4L, 4L, 73L, 12L)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
Мы можем использовать группу по операции, удалив подстроку в конце, то есть _3p или _5p с str_remove, а затем использовать log деление пары «n»
library(dplyr)
library(stringr)
df1 %>%
group_by(grp = str_remove(microRNAs, "_[^_]+$")) %>%
mutate(new = log2(last(n)/first(n)))
Спасибо, как всегда восхитительно!