R:格式化数据框的列以与查找表兼容

R: Format columns of data frame to be compatible as lookup tables

我有两个 data.frames 格式不正确。一个是大参考,另一个是我想查找的子集,以便从参考中提取更多数据,但格式化很困难。

较小的子集如下所示:

> head(lookup, n = 2)

      gene_id class_code nearest_ref_id
1 XLOC_001184       <NA>           <NA>
2 XLOC_001225       <NA>           <NA>


> gene_short_name
1      ORF%20Transcript_11308%7Cg.37058%20Transcript_11308%7Cm.37058%20type%3Acomplete%20len%3A195%20%28%2B%29
2 ORF%20Transcript_11347%7Cg.37236%20Transcript_11347%7Cm.37236%20type%3A5prime_partial%20len%3A87%20%28%2B%29

                    locus length coverage
1 Transcript_11308:0-1727     NA       NA
2 Transcript_11347:0-1584     NA       NA

参考如下(注意:手动删除了一些序列,以免它们太长而无法显示在这里):

> head(refRna, n=2)
             seq_names   sequences
1 Transcript_0 len=550   GTTTTATTTGTTGTTGTTGTTGTTTTTATATGTA
2 Transcript_1 len=760   GACCACACCACTCGTCTGAATTCTCGATGTGGAA

reference$seq_names中有一个space,lookup$locus中有一个:,后面还有一些额外的数字。

一些 reference$seq_names 有更多 space 的额外信息。例如:

4        Transcript_3 len=440 CDS=1-439 exon=0-440 five_prime_UTR=439-440 gene=0-440 mRNA=0-440 three_prime_UTR=0-1

Transcript_1234 位是唯一标识符。

最终我想为每个 lookup$locus 检索 reference$sequences 并将其附加到新列 lookup$sequence 或创建一个仅包含 [=21= 的新数据框], Transcript_1234位和对应的序列。感谢任何建议。

根据你提供的内容,我在这里给你一些 advice/stratigies 来解决你的问题。假设您的数据类型 data.frame 不是特化的 类,例如 GenomicRanges。 (使用函数class仔细检查)。

  • 首先,您需要通过删除您提到的额外 space 来清理列 reference$seq_namesgsubstr_replace 等函数会有所帮助。参见 this Whosebug post
  • 同样需要清理lookupdata.frame。要在 : 之后删除 texts/numbers,函数 gsub 是你的朋友;您可以将它与正则表达式结合使用,以在感兴趣的符号之后删除所有内容。例如:

    lookup$locus <- gsub("\:.*", "", lookup$locus) #replaces after : with empty string

  • 您提到的 "look-up" 过程称为 查询 。您需要一个 key 列来识别较小的子集并将其与参考数据集相匹配。 reference 中的键似乎是成绩单 ID,您需要从更长的字符串中提取它。根据您提供的内容,一种策略是删除 space 之后的所有内容,并另存为新列。例如:

    参考$NEW_COLUMN <- gsub("\.*", "",参考$seq_names)

  • 要完成您的最终任务,您可能需要执行连接操作(请参阅此 Wikipedia page 了解背景信息)。在 R 中,我们使用函数 merge(DATAFRAME1, DATAFRAME2, by=KEY)