2016-03-20 2 views
2

У меня есть 96 файлов в file_listMerge столбцов от file_list

file_list <- list.files(pattern = "*.mirna") 

Все они имеют одни и те же столбцы, но количество строк меняется. Пример файла:

> head(test1) 
         seq   name freq    mir start end mism add t5 t3  s5  s3 DB 
1 TGGAGTGTGATAATGGTGTTT seq_100003_x4 4 hsa-miR-122-5p 15 35 11TC  0 0 g GCTGTGGA TTTGTGTC miRNA 
2 TGTAAACATCCCCGACCGGAAGCT seq_100045_x4 4 hsa-miR-30d-5p  6 29 17CT  0 0 CT TTGTTGTA GAAGCTGT miRNA 
3 CTAGACTGAAGCTCCTTGAAAA seq_100048_x4 4 hsa-miR-151a-3p 47 65 0 I-AAA 0 gg CCTACTAG GAGGACAG miRNA 
4 AGGCGGAGACTTGGGCAATTGC seq_100059_x4 4 hsa-miR-25-5p 14 35 0  0 0 C TGAGAGGC ATTGCTGG miRNA 
5 AAACCGTTACCATTACTGAAT seq_100067_x4 4 hsa-miR-451a 17 35 0 I-AT 0 gtt AAGGAAAC AGTTTAGT miRNA 
6 TGAGGTAGTAGCTTGTGCTGTT seq_10007_x24 24 hsa-let-7i-5p  6 27 12CT  0 0 0 TGGCTGAG TGTTGGTC miRNA 
    precursor ambiguity 
1 hsa-mir-122   1 
2 hsa-mir-30d   1 
3 hsa-mir-151a   1 
4 hsa-mir-25   1 
5 hsa-mir-451a   1 
6 hsa-let-7i   1 

второй файл

> head(test2) 
         seq   name freq    mir start end mism add t5 t3  s5  s3 DB 
1 ATTGCACTTGTCCTGGCCTGT seq_1000013_x1 1 hsa-miR-92a-3p 49 69 14TC 0 t 0 AAAGTATT CTGTGGAA miRNA 
2 AAACCGTTACTATTACTGAGA seq_1000094_x1 1 hsa-miR-451a 17 36 11TC I-A 0 tt AAGGAAAC AGTTTAGT miRNA 
3 TGAGGTAGCAGATTGTATAGTC seq_1000169_x1 1 hsa-let-7f-5p  8 28 9CT I-C 0 t GGGATGAG AGTTTTAG miRNA 
4 TGGGTCTTTGCGGGCGAGAT seq_100019_x12 12 hsa-miR-193a-5p 21 40 0 0 0 ga GGGCTGGG ATGAGGGT miRNA 
5 TGAGGTAGTAGATTGTATAGTG seq_100035_x12 12 hsa-let-7f-5p  8 28 0 I-G 0 t GGGATGAG AGTTTTAG miRNA 
6 TGAAGTAGTAGGTTGTGTGGTAT seq_1000437_x1 1 hsa-let-7b-5p  6 26 4AG I-AT 0 t GGGGTGAG GGTTTCAG miRNA 
     precursor ambiguity 
1 hsa-mir-92a-2   1 
2 hsa-mir-451a   1 
3 hsa-let-7f-2   1 
4 hsa-mir-193a   1 
5 hsa-let-7f-2   1 
6 hsa-let-7b   1 

Я хотел бы создать уникальный идентификатор, состоящий из колонн mir и seq:

HSA-MIR-122-5p_TGGAGTGTGATAATGGTGTTT

Затем я хотел бы объединить все 96 файлов, основанных на этом идентификаторе, и взять столбец freq из каждого файла.

ID         freq_file1  freq_file2  ... 
hsa-miR-122-5p_TGGAGTGTGATAATGGTGTTT 4   12 

Если идентификатор не pressent в определенном файле freq должен быть NA

+1

Я видел, как вы отправляли подобный вопрос пару раз. Рассматривали ли вы пример с использованием 'dput' и вместо того, чтобы показывать только один набор данных« test », покажите как минимум 2 или 3, которые описывают проблему. – akrun

+0

добавил два набора данных. – user2300940

+0

Вы можете попробовать« Уменьшить (функция (...) merge (..., by = "ID"), mget (ls (pattern = "test \\ d +"))) ', предполагая, что' test1', 'test2' являются объектами, созданными в глобальной среде после прочтения данных. – akrun

ответ

2

Мы можем использовать Reduce с merge на list в data.frame с.

lst <- lapply(mget(ls(pattern="test\\d+")), 
    function(x) subset(transform(x, ID=paste(precursor, 
      seq)), select=c("ID", "freq"))) 
Reduce(function(...) merge(..., by = "ID"), lst) 

Примечание: В приведенном выше, я предположил, что «test1», «test2» объекты уже созданы в глобальной среде путем чтения файлов в «file_list». Если нет, то мы можем непосредственно читать файлы в list вместо создания дополнительных объектов data.frame т.е.

library(data.table) 
lst <- lapply(file_list, function(x) 
    fread(x, select=c("precursor", "seq", "freq"))[, 
     list(ID=paste(precursor, seq), freq=freq)]) 
Reduce(function(x,y) x[y, on = "ID"], lst) 

или вместо fread (от data.table) использовать read.csv/read.table и использовать merge как раньше на «ЛСТ»

+1

Удивительно, что Забудь обо мне. – user2300940

Смежные вопросы