以下是处理基因注释数据、筛选匹配基因以及输出结果的关键步骤。我们使用的数据包括Excel文件 (excel_data
) 和GTF文件 (gtf_df
),目标是提取匹配的基因并生成新的文件。
1. 加载并查看数据
excel_data
:读取了包含基因ID的Excel文件,列名为Geneid
。gtf_df
:包含GTF文件的基因注释数据,包含多个列(如seqnames
、start
、end
、gene_id
等)。
# 查看excel_data的前几行
head(excel_data)
# 查看gtf_df的前几行
head(gtf_df)
2. 数据格式转换
- 将
excel_data
从tibble
转换为data.frame
格式,以便更方便地进行后续操作。
# 将excel_data转换为data.frame格式
excel_data = as.data.frame(excel_data)
3. 匹配基因ID
- 使用
gene_id
列(从gtf_df
中提取)与excel_data$Geneid
列进行匹配。 - 创建新列
gene_idmatched_data
,标记每个基因是否存在于excel_data
中。
# 创建新的列,标记gene_id是否在excel_data中存在
gtf_df$gene_idmatched_data <- gtf_df$gene_id %in% excel_data$Geneid
4. 筛选匹配的基因
- 筛选出
gene_idmatched_data == TRUE
的行,即那些在excel_data$Geneid
中存在的基因。 - 得到的
gtf_m
是一个包含匹配基因的子集数据。
# 筛选出匹配的基因
gtf_m = gtf_df[gtf_df$gene_idmatched_data, ]
5. 去重与统计
- 计算
gtf_m
中唯一的gene_id
数量,即这些基因在excel_data
中匹配到的基因。 - 计算
excel_data
中总共有多少个基因ID,并找出没有匹配到的基因。
# 计算匹配的唯一基因ID数
unique_gene_ids <- unique(gtf_m$gene_id)
length(unique_gene_ids) # 输出唯一基因ID的数量
# 计算excel_data中的总基因数
nrow(excel_data)
# 计算没有匹配到的基因
unmatched_in_excel <- setdiff(excel_data$Geneid, gtf_df$gene_id)
length(unmatched_in_excel) # 输出没有匹配到的基因数
# 查看没有匹配到的基因ID
unmatched_in_excel
6. 保存结果
- 将匹配的基因(
gtf_m
)保存为Excel文件,方便后续分析。
# 将匹配的基因数据保存为Excel文件
write_xlsx(gtf_m, "gtf_m.xlsx")
7. 总结
excel_data
和gtf_df
中的基因ID进行匹配,筛选出在excel_data$Geneid
中出现的基因。- 使用
setdiff()
找出没有匹配到的基因。 - 将匹配到的基因保存为新的文件(如 Excel 文件)供进一步使用。
遇到的错误和解决办法:
-
错误:未定义的函数
calss
和classs
- 使用正确的函数名
class()
来检查数据类型。 class(excel_data)
返回"data.frame"
。
- 使用正确的函数名
-
错误:赋值失败
- 在创建
gene_idmatched_data
时,使用了错误的方式来存储匹配结果。正确的做法是使用%in%
来检查匹配性并赋值给新列。
- 在创建
-
错误:数据维度不一致
- 在处理数据时,注意数据框的维度问题(如
gtf_df
有1294906行,而尝试赋值时结果不匹配)。可以通过检查数据的维度和使用合适的筛选方式避免此问题。
- 在处理数据时,注意数据框的维度问题(如
通过本次操作,我们熟悉了基因注释数据的处理流程,学会了如何根据基因ID进行数据筛选和匹配,并将结果输出为便于分析的文件。