2015-02-23 3 views
1

Предположим, у меня есть файл с двумя столбцами с надписью 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 

Я хочу, чтобы создать новый файл, в котором каждая строка в колонке будет отображаться только один раз с соответствующими строками сцепленных в столбце B.

Полученный файл будет начинаться с:

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

Есть простой способ сделать это в R?

+0

К сожалению у меня не было хорошего ключевого слова: агрегат, а не конкатенации ... – bela83

+1

'агрегат (B ~ A, данные = Дат, паста , sep = ",") ' – thelatemail

+0

Хорошо, что делает трюк! – bela83

ответ

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) 
+1

Похоже на это! Я сейчас увольняюсь и буду принимать только завтра, потому что я не могу проверить прямо сейчас ... – bela83

+1

Хорошо. Бонусная точка: это заставило меня узнать, как установить пакет R. Я повышаю! – bela83