R:根据列Y中的ID组合X列的多行内容

  • 本文关键字:组合 ID 中的 r dataframe
  • 更新时间 :
  • 英文 :


我在R中有一个数据帧,它由两列组成,如下所示:

x <- data.frame("gene" = c('gene1', 'gene2', 'gene3', 'gene3', 'gene4', 'gene5', 'gene5'), "info" = c('A1','B2','A45','B89','A1','C46','D89'))
x

数据帧如下所示:

gene info
1 gene1   A1
2 gene2   B2
3 gene3  A45
4 gene3  B89
5 gene4   A1
6 gene5  C46
7 gene5  D89

您会注意到基因列有几个同名条目(基因3和基因5(。我想改变这一点,使每个基因只占一行。因此,我想将数据帧重组为这样的东西:

gene info
1 gene1   A1
2 gene2   B2
3 gene3   A45,B89
4 gene4   A1
5 gene5   C46,D89

我不知道该怎么做。我发现这篇关于类似内容的帖子。在那里,他们必须取不同行的总和,但我只想把基因ID相同的行的信息值放在一起。

有人知道怎么做吗?我目前在R工作,但bash解决方案也会有所帮助。

已经谢谢了!

一个简单的基本R选项使用aggregate

> aggregate(info ~ gene, x, c)
gene     info
1 gene1       A1
2 gene2       B2
3 gene3 A45, B89
4 gene4       A1
5 gene5 C46, D89

带有data.table的选项

library(data.table)
setDT(x)[, .(info = toString(info)), gene]

您可以使用dplyr进行以下操作:

library(dplyr)
x %>% group_by(gene) %>% summarize(info = paste(info, collapse =','))

这会给你

gene  info   
<chr> <chr>  
1 gene1 A1     
2 gene2 B2     
3 gene3 A45,B89
4 gene4 A1     
5 gene5 C46,D89

最新更新