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_names
。 gsub
和 str_replace
等函数会有所帮助。参见 this Whosebug post。
同样需要清理lookup
data.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)
。
我有两个 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_names
。gsub
和str_replace
等函数会有所帮助。参见 this Whosebug post。 同样需要清理
lookup
data.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)
。