如何通过提取特定行来创建变量?

时间:2016-04-14 08:23:47

标签: r bioinformatics

我的数据如下所示,基因名称中包含的SNP名称(rs号或c#_pos#)(例如ABCB9)。在命名为c#_pos000000的SNP中,#的范围是1到22(染色体编号)

ABCB9  
rs11057374  
rs7138100  
c22_pos41422393  
rs12309481  
END  

ABCC10  
rs1214748  
END  

HDAC9  
rs928578  
rs10883039  
END  

HCN2
rs12428035  
rs9561933  
c2_pos102345
rs3848077  
rs3099362    
END 

通过使用这些数据,我想使输出如下

rs11057374        ABCB9  
rs7138100         ABCB9  
c22_pos41422393   ABCB9  
rs12309481        ABCB9  

rs1214748         ABCC10   

rs928578          HDAC9    
rs10883039        HDAC9    

rs12428035        HCN2     
rs9561933         HCN2      
c2_pos102345      HCN2      
rs3848077         HCN2      
rs3099362         HCN2  

没有必要是否有空白和" END"

如何在R或linux中输出此输出?

2 个答案:

答案 0 :(得分:3)

我们可以略微区别地做到这一点。在使用readLines阅读文件并删除前导/滞后空格(trimws)后,split根据基于空白值创建的分组向量删除'lines1'("" ),从""元素中删除"END"list字符串,然后设置names的{​​{1}},并对每个{{1}进行第一次观察} element(list [list)同时提取除第一个元素以外的所有其他元素,并sapply(lst1,

, 1)

数据

stack

答案 1 :(得分:1)

使用原始文件获取SNP Gene映射,而不是使用已处理的文件。正如您所提到的,此数据是plink command下面的输出:

plink --file mydata --make-set gene.list --write-set

所以我们已经有了 gene.list mydata.map 文件。使用以下两个文件:

library(data.table)
# gene list file
geneList <- data.table(
  chr = 1:2,
  start = c(10, 40),
  end = c(13, 45),
  gene = paste0("gene_",1:2))
#    chr start end   gene
# 1:   1    10  13 gene_1
# 2:   2    40  45 gene_2

# map file
map <- data.table(
  chr = c(1,1,1,2,2,2,3),
  snp = paste0("snp_",1:7),
  cm = 0,
  bp = c(10,11,15,40,41,49,100))

# prepare for merging, rename colnames to match gene list colnames
map <- map[, list(chr, start = bp, end = bp, snp)]
#    chr start end   snp
# 1:   1    10  10 snp_1
# 2:   1    11  11 snp_2
# 3:   1    15  15 snp_3
# 4:   2    40  40 snp_4
# 5:   2    41  41 snp_5
# 6:   2    49  49 snp_6
# 7:   3   100 100 snp_7

# set key for merging
setkey(map, chr, start, end)

# merge and susbset snp and gene columns
foverlaps(geneList, map)[, list(snp, gene)]
#      snp   gene
# 1: snp_1 gene_1
# 2: snp_2 gene_1
# 3: snp_4 gene_2
# 4: snp_5 gene_2

另外,请参阅this post了解重叠示例/函数的更多合并。