我在 R 中有以下数据框。它代表了一个组成的蛋白质结构,以便于解释。
Uniprots Chain resSeq Serial
P68871 D 23 3446
P68871 D 24 3453
P68871 D 25 3457
P68871 D 26 3461
P68871 D 27 3470
P69011 A 38 3561
P69011 A 39 3568
P69011 A 40 3577
P69011 A 41 3588
P69011 A 42 3599
P69011 A 43 3610
P69011 A 44 3619
P69011 A 45 3625
P69011 A 46 3636
P0116 B 2 4239
P0116 B 4 4242
P0116 B 5 4268
P0116 B 6 4279
P0116 B 7 4285
P0116 B 8 4299
P0116 B 9 5015
P0116 C 15 5055
P0116 C 30 5199
P0116 C 42 5239
Run Code Online (Sandbox Code Playgroud)
我想要的是将其折叠起来,使其看起来像这样:
Uniprot Chain resSeq_start resSeq_end Serial_start Serial_end
P68871 D 23 27 3446 3470
P69011 A 38 46 3561 3636
P0116 B 2 9 4239 5015
P0116 C 15 42 5055 5239
Run Code Online (Sandbox Code Playgroud)
基本上,我想折叠到前 1,2 和 3 列。然后我可以使用第四列来检查它是否有效。我以为我可以用聚合来做到这一点,但这似乎不起作用。我绝对可以用一些混乱的 for 循环来做到这一点(继续附加到向量直到新的 uniprot/链),但这很丑陋。
需要注意的一件事是 Uniprot/Chain 组合并不总是唯一的。具体来说,一个 uniprot 可以有多个链(如我的示例)。
感谢您的帮助!
而且当然,dplyr
require(dplyr)
dat %>% group_by(Uniprots, Chain) %>%
summarize(resSeq_start = min(resSeq),
resSeq_end = max(resSeq),
Serial_start = min(Serial),
Serial_end = max(Serial))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |