手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据
1. 手动解压并读取文件内容
file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz”
使用latin1编码读取文件所有行
con <- gzfile(file_path, “r”)
all_lines <- readLines(con, encoding = “ISO-8859-1”) # 明确指定编码
close(con)
2. 查找数据开始和结束的位置
start_line <- grep(“^!series_matrix_table_begin”, all_lines) + 1
end_line <- grep(“^!series_matrix_table_end”, all_lines) - 1
3. 提取表达矩阵数据部分
data_lines <- all_lines[start_line:end_line]
4. 将数据写入临时文件
temp_file <- “temp_geo_data.txt”
writeLines(data_lines, temp_file)
5. 读取表达矩阵
expr_matrix <- read.delim(temp_file, sep = “\t”, check.names = FALSE,
stringsAsFactors = FALSE)
6. 提取样本信息(从注释行中)
sample_info_lines <- all_lines[grep(“^!Sample_”, all_lines)]
处理样本信息
sample_info <- data.frame()
for (line in sample_info_lines) {
分割每行的标签和值
parts <- strsplit(line, “\t”)[[1]]
key <- sub(“^!Sample_”, “”, parts[1])
提取样本值
values <- parts[-1]
添加到数据框
if (nrow(sample_info) == 0) {
sample_info <- data.frame(matrix(values, nrow = 1))
colnames(sample_info) <- values
} else {
sample_info[key, ] <- values
}
}
转置样本信息,使样本为行,信息为列
sample_info <- as.data.frame(t(sample_info))
colnames(sample_info) <- sub(“^!Sample_”, “”,
sapply(strsplit(sample_info_lines, “\t”), “[[”, 1))
7. 清理临时文件
file.remove(temp_file)
8. 查看结果
cat(“表达矩阵维度:”, dim(expr_matrix), “\n”)
cat(“样本信息维度:”, dim(sample_info), “\n”)
9. 保存处理后的数据
saveRDS(expr_matrix, “processed_data/GSE32967_expr_matrix.rds”)
saveRDS(sample_info, “processed_data/GSE32967_sample_info.rds”)