我正在尝试通过将单一氨基酸的质量加在一起来分配多肽的质量。
例如,我有一个像下面这样的vactorlike:
c("AA", "AC", "AD" )并且我有一个数据帧,每个字母都有值
symbol mass
1 A 71.03711
2 D 115.02694
3 C 103.00919如何计算"AA“、"AC”和"AD“的值,这些值应该将它们各自的质量值相加。例如,"AA“应为71.03711+71.03711=142.07422。我希望我的结果是这样的,并且可以导出为具有两列的csv文件:
peptide mass
1 AA 142.07422
2 AC 174.0463
3 AD 186.06405发布于 2021-04-23 18:51:48
如果数据帧被称为df,向量被称为peptide,你可以在peptide中拆分单个字符,用数据帧中的列对其进行match,得到相应的mass并对值进行sum。我们可以将结果放入数据帧中。
peptide <- c("AA", "AC", "AD" )
mass <- sapply(strsplit(vec, ''), function(x) sum(df$mass[match(x, df$symbol)]))
result <- data.frame(peptide, mass)
result
# peptide mass
#1 AA 142.0742
#2 AC 174.0463
#3 AD 186.0641发布于 2021-04-23 18:52:26
你可以尝试一下tidyverse
library(tidyverse);
symbol <- c("AA", "AC", "AD" )
df <- read.table(text = "symbol mass
1 A 71.03711
2 D 115.02694
3 C 103.00919")
tibble(symbol) %>%
rownames_to_column() %>%
separate_rows(symbol, sep="") %>%
inner_join(df) %>%
group_by(rowname) %>%
summarise(symbol = paste(symbol, collapse = ""),
mass = sum(mass))
# A tibble: 3 x 3
rowname symbol mass
<chr> <chr> <dbl>
1 1 AA 142.
2 2 AC 174.
3 3 AD 186.在tidyverse中使用包含的purrr的map和reduce函数,您可以尝试一下
colSums(map(df$symbol, ~str_count(symbol, .)) %>% reduce(rbind)*df$mass)
[1] 142.0742 174.0463 186.0641https://stackoverflow.com/questions/67228586
复制相似问题