如何将SAS .matrix文件转换为CSV/TSV或在R中读取?
在R中读取可变空格分隔的SAS .matrix文件方案
针对你遇到的.matrix文件列间为可变数量空格、readr/read.delim读取后列名不匹配的问题,以下是可行的R读取方案:
核心思路
利用正则表达式匹配任意数量空格作为分隔符,同时结合x.info文件中的列名来规范读取后的数据集列名。
步骤1:读取x.info获取列名
先读取存储列信息的x.info文件,提取其中的列名(假设x.info中第一列为列名,第二列为描述):
# 读取x.info,根据实际分隔符调整sep(截图显示为制表符分隔) x_info <- read.table("x.info", header = TRUE, sep = "\t", stringsAsFactors = FALSE) # 提取列名字段 col_names <- x_info[, 1]
步骤2:读取x.matrix文件
方法1:基础read.table函数
使用sep="\\s+"匹配任意数量的空格/制表符作为分隔符,同时指定从x.info获取的列名:
# 读取.matrix文件,header=FALSE因为文件第一行是数据而非列名 matrix_data <- read.table("x.matrix", header = FALSE, sep = "\\s+", col.names = col_names, stringsAsFactors = FALSE)
方法2:data.table包的fread(更高效)
fread会自动识别可变空格分隔符,适合大文件:
library(data.table) matrix_data <- fread("x.matrix", header = FALSE, col.names = col_names)
步骤3:验证匹配情况
检查读取后的数据集列数是否与x.info中的列数一致:
# 确认列数匹配 stopifnot(ncol(matrix_data) == length(col_names))
特殊情况处理
如果.matrix文件开头存在注释行,可通过skip参数跳过:
# 跳过前1行注释 matrix_data <- read.table("x.matrix", header = FALSE, sep = "\\s+", col.names = col_names, skip = 1)
内容的提问来源于stack exchange,提问作者Shz
相关产品推荐
相关产品推荐

