第一个项匹配的行的连接

时间:2015-02-23 22:22:21

标签: r

假设我有一个标有A和B两列的文件。每列包含不同的字符串,允许重复。 A列已经排序。 这是一个例子:

A       B
c1045   GO:0003735
c1045   GO:0005829
c1045   GO:0005840
c1045   GO:0006412
c1045   GO:0019843
c11467  GO:0003735
c11467  GO:0005840
c11467  GO:0006412
c1168   GO:0006950
c1168   GO:0006950
c1175   GO:0003674
c1175   GO:0003729
c1175   GO:0003735
c1175   GO:0006412

我想创建一个新文件,其中A列中的每个字符串只出现一次,并且在B列中连接相应的字符串。

生成的文件将以:

开头
A       B
c1045   GO:0003735,GO:0005829,GO:0005840,GO:0006412,GO:0019843.
c11467  GO:0003735,GO:0005840,GO:0006412.

在R中有一种简单的方法吗?

1 个答案:

答案 0 :(得分:3)

这是你在找什么?

library(data.table)
dt <- data.table(df)
##
R> dt[,lapply(.SD,function(x) {
    paste0(x,collapse=",")
  }),by=A]
        A                                                      B
1:  c1045 GO:0003735,GO:0005829,GO:0005840,GO:0006412,GO:0019843
2: c11467                       GO:0003735,GO:0005840,GO:0006412
3:  c1168                                  GO:0006950,GO:0006950
4:  c1175            GO:0003674,GO:0003729,GO:0003735,GO:0006412

数据:

df <- read.table(
  text="A       B
c1045   GO:0003735
c1045   GO:0005829
c1045   GO:0005840
c1045   GO:0006412
c1045   GO:0019843
c11467  GO:0003735
c11467  GO:0005840
c11467  GO:0006412
c1168   GO:0006950
c1168   GO:0006950
c1175   GO:0003674
c1175   GO:0003729
c1175   GO:0003735
c1175   GO:0006412",
  header=TRUE,
  stringsAsFactors=F)