我是R的超级新手,很抱歉打扰您一个简单的问题。
我有一个很大的数据框(完整的数据框有25列和几百万行),其中包含肽谱库的信息(请参见下面的示例)。
我通过将缩写(UniMod:XXX)写到肽序列(PeptideSequence)中来将修饰引入基础库。我剩下的就是根据我的修饰和电荷(PrecursorCharge)的出现来更新肽质量(PrecursorMz)。因此,对于每个“(UniMod:259)”部分字符串,我必须将对应的质量增加8((UniMod:267)为10,再除以电荷(电荷并不总是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
非常感谢您,并将提供您可能需要的其他信息。
答案 0 :(得分:0)
使用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