问题描述
很抱歉,标题不清楚或我没有很好地解释。
1 2 3 4 5 6 7 8 9 10
L 40.220674 17.3635308 17.3635308 17.3635308 9.867452 0 0.0000000 0.000000 0.0000000 0.0000000
M 29.589501 19.1056911 19.1056911 19.1056911 14.285714 0 10.0000000 6.842105 1.4736842 0.1052632
I 13.761672 10.1045296 10.1045296 10.1045296 0.000000 0 0.0000000 0.000000 0.0000000 0.0000000
Y 25.085714 21.4285714 21.4285714 21.4285714 12.223859 0 0.0000000 0.000000 0.0000000 0.0000000
W 3.555865 0.8130081 0.8130081 0.8130081 0.000000 0 0.0000000 0.000000 0.0000000 0.0000000
K 2.700859 0.2322880 0.2322880 0.2322880 1.325479 0 2.6315789 3.684211 2.6315789 2.1052632
S 8.739141 6.9105691 6.9105691 6.9105691 0.000000 0 0.0000000 0.000000 0.0000000 0.0000000
V 1.969431 0.2322880 0.2322880 0.2322880 0.000000 0 3.4736842 3.684211 2.5263158 0.1052632
每一行对应一个不同的氨基酸,每一列是该氨基酸在肽中的位置。
我还有许多肽的df,表明该肽每个位置的氨基酸。
pep_1 pep_2 pep_3
1 M A C
2 A C L
3 C L W
4 L W S
5 W S F
6 S F S
7 F S W
8 S W P
9 W P S
10 P S C
11 S C F
12 C F L
13 F L S
14 L S L
我正在尝试将每种肽与得分矩阵进行匹配,当氨基酸与评分矩阵中的氨基酸处于相同位置时,我想导出并汇总每种肽的所有这些值。
我尝试使用plyr :: match_df失败。
是否存在可以完成此任务的更高阶函数或程序包?欢迎任何建议。
谢谢!
解决方法
我们可以使用pivot_longer
将两个数据集重塑为'long'格式,然后在匹配的列上使用left_join
进行联接,并使用{{1 }}
pivot_wider
数据
library(dplyr)
library(tidyr)
library(tibble)
df2 %>%
mutate(rn = row_number()) %>%
pivot_longer(cols = -rn,values_to = 'pep') %>%
left_join(df1 %>%
rownames_to_column('pep') %>%
pivot_longer(cols = -pep,names_to = 'rn') %>%
mutate(rn = as.integer(rn))) %>%
select(-pep) %>%
pivot_wider(names_from = name,values_from = value)