我有一对在桌子上代表遗传上相同的个体。我将使用字母作为配对。例如,a,x,y和b是同一个人!
Mate1 Mate2
a x
a y
b y
c z
d l
d j
d m
j n
f o
f p
f q
f r
Run Code Online (Sandbox Code Playgroud)
如您所见,Mate1在Mate2中可以有多个匹配项,反之亦然。我想获得这个:
Mate1 Mate2 Mate3 Mate4 Mate5
a x y b
c z
d l m j n
f o p q r
Run Code Online (Sandbox Code Playgroud)
这个想法是:我希望每组个人一行,但是有时这涉及通过Mate1或Mate2链接对多次。示例:a通过y的中间位置链接到b。在我的真实数据集中,您可能会拥有更多类似y的中间体。我希望所有这些都在同一行中(或者如果更容易的话,添加带有“组” ID的新列)。
关于如何做的任何想法?非常感谢!
我已经尝试了许多tidyverse功能的组合,例如传播,联合,分组等,但没有成功。我努力获得一些坚固而完整的东西。
您可以将igraph软件包用于此任务:
sort(clusters(graph.data.frame(df, directed = FALSE))$membership)
a b x y c z d j l m n f o p q r
1 1 1 1 2 2 3 3 3 3 3 4 4 4 4 4
Run Code Online (Sandbox Code Playgroud)
如果要进一步匹配所需的输出,可以添加dplyr和tidyr:
pairs <- sort(clusters(graph.data.frame(df, directed = FALSE))$membership)
pairs %>%
enframe() %>%
group_by(value) %>%
mutate(variable = paste0("Mate", 1:n())) %>%
ungroup() %>%
spread(variable, name) %>%
select(-value)
Mate1 Mate2 Mate3 Mate4 Mate5
<chr> <chr> <chr> <chr> <chr>
1 a b x y <NA>
2 c z <NA> <NA> <NA>
3 d j l m n
4 f o p q r
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |