R - изменение столбцов значений в зависимости от строк в одной строке - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в R, извините, что беспокою вас таким простым вопросом.
У меня есть большой фрейм данных (полный из 25 столбцов и несколько миллионов строк), содержащий информацию для спектральной библиотеки пептидов (см. пример ниже).
Я вношу модификации в базовую библиотеку, записывая их аббревиатуры (UniMod: XXX) в пептидные последовательности (PeptideSequence). Все, что мне осталось, - это обновление пептидных масс (PrecursorMz) в соответствии с появлением моих модификаций и зарядом (PrecursorCharge). Поэтому для каждой частичной строки "(UniMod: 259)" мне пришлось бы увеличить соответствующую массу на 8 (10 для (UniMod: 267), разделенную на заряд (заряд НЕ всегда равен 3, извините). Например, измененная первая строка должна прочтите 714.64876 после учета изменений в последовательности.

PrecursorMz PeptideSequence PrecursorCharge 709.31543 AAAEK(UniMod:259)LFGNMEGDCPSDWK(UniMod:259) 3 709.31543 AAAEKLFGNMEGDCPSDWK(UniMod:259) 3 529.58044 AK(UniMod:259)LWCSTTADYDR(UniMod:267) 3

Большое вам спасибо и предоставим дополнительную информацию, которая может вам понадобиться.

1 Ответ

0 голосов
/ 05 мая 2020

Использование stringr::str_count из stringr (часть tidyverse)

library(tidyverse)

df %>%
map_if(is.factor, as.character) %>%
  mutate(
    PrecursorMz = PrecursorMz + (
      8 * str_count(PeptideSequence, "UniMod:259") + 10 * str_count(PeptideSequence, "UniMod:267")
    ) / PrecursorCharge,
    PrecursorMz = format(round(PrecursorMz, 5), nsmall = 5)
  )
# A tibble: 3 x 3
  PrecursorMz PeptideSequence                             PrecursorCharge
  <chr>       <chr>                                                 <dbl>
1 714.64876   AAAEK(UniMod:259)LFGNMEGDCPSDWK(UniMod:259)               3
2 711.98210   AAAEKLFGNMEGDCPSDWK(UniMod:259)                           3
3 535.58044   AK(UniMod:259)LWCSTTADYDR(UniMod:267)                     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...