微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过行号和行名匹配2个数据帧,并在匹配时从第一个df中提取值 数据

如何解决通过行号和行名匹配2个数据帧,并在匹配时从第一个df中提取值 数据

很抱歉,标题不清楚或我没有很好地解释。

我有一个得分矩阵作为数据框,如下所示:

    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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。