【发布时间】:2018-04-04 08:58:32
【问题描述】:
我有以下数据框:
library(tidyverse)
dat <- structure(list(fasta_header = c(">seq1", ">seq2"), sequence = c("MPSRGTRPE",
"VSSKYTFWNF")), .Names = c("fasta_header", "sequence"), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))
dat
#> # A tibble: 2 x 2
#> fasta_header sequence
#> <chr> <chr>
#> 1 >seq1 MPSRGTRPE
#> 2 >seq2 VSSKYTFWNF
我想做的是计算每一行氨基酸的频率。想要的结果是这个(手动)
fasta_header sequence M P S R G T E V K Y F W N
>seq1 MPSRGTRPE 1 1 1 2 1 1 1 0 0 0 0 0 0
>seq2 VSSKYTFWNF 0 0 2 0 0 1 0 1 1 1 2 1 1
如何使用 dplyr 管道方法做到这一点?
【问题讨论】:
-
那些“MPSRGTEVKYFWN”列名是固定的还是动态的?
-
@Vasim 动态,即氨基酸列是
dat中sequence列所有行的唯一值 -
没有必要重新发明轮子。您应该使用来自
Bioconductor的Biostrings包。它有各种很棒的功能。 -
我强烈支持@Amar 的建议。看看
?Biostrings::letterFrequency和?Biostrings::alphabetFrequency。