我正在阅读一个制表符分隔文件,它是使用以下代码的矩阵。
infile <- file("line.txt", "r")
readLines(infile) -> matrix
我无法使用read.table()
,因为所有行中的列数都不相同。
输入数据:
position SNP rs11828013 rs7931369 rs567411332 rs184532784 rs7931583 rs555937772 rs9651750 rs9651751 rs9651752 rs73530502
71278426 rs11828013 rs11828013
71278461 rs7931369 - rs7931369
71278482 rs567411332 - - rs567411332
71278519 rs184532784 - - - rs184532784
71278580 rs7931583 - 1.000 - - rs7931583
71278733 rs555937772 - - - - - rs555937772
71278792 rs9651750 - 1.000 - - 1.000 - rs9651750
71278828 rs9651751 - 1.000 - - 1.000 - 1.000 rs9651751
71278915 rs9651752 - 1.000 - - 1.000 - 1.000 1.000 rs9651752
71279052 rs73530502 - 0.116 - - 0.116 - 0.116 0.116 0.116 rs73530502
答案 0 :(得分:3)
使用:
read.table(file="line.txt", na.strings = "-",
header=TRUE, stringsAsFactors=FALSE, fill=TRUE)
其中&#34; line.txt&#34;您为制表符分隔的文本文件指定的名称。
使用fill=TRUE
允许来自?read.table
:
填充逻辑。如果为TRUE,则万一行长度不等, 隐式添加空白字段
na.strings 要解释的字符串的字符向量 作为NA值。空白字段也被视为缺少值 逻辑,整数,数字和复杂字段。
要使用您的示例输入,而不是使用file="line.txt"
,我只是这样做:
x <-
read.table(text='
position SNP rs11828013 rs7931369 rs567411332 rs184532784 rs7931583 rs555937772 rs9651750 rs9651751 rs9651752 rs73530502
71278426 rs11828013 rs11828013
71278461 rs7931369 - rs7931369
71278482 rs567411332 - - rs567411332
71278519 rs184532784 - - - rs184532784
71278580 rs7931583 - 1.000 - - rs7931583
71278733 rs555937772 - - - - - rs555937772
71278792 rs9651750 - 1.000 - - 1.000 - rs9651750
71278828 rs9651751 - 1.000 - - 1.000 - 1.000 rs9651751
71278915 rs9651752 - 1.000 - - 1.000 - 1.000 1.000 rs9651752
71279052 rs73530502 - 0.116 - - 0.116 - 0.116 0.116 0.116 rs73530502
',na.strings='-', header=TRUE, stringsAsFactors = FALSE, fill=TRUE)
要将其重新转换为下三角矩阵,您可以执行以下操作:
x[,1] <- NULL
rownames <- x[,1]
x <- sapply(x[,-1], as.numeric)
rownames(x) <- rownames
x
返回矩阵:
rs11828013 rs7931369 rs567411332 rs184532784 rs7931583 rs555937772 rs9651750 rs9651751 rs9651752 rs73530502
rs11828013 NA NA NA NA NA NA NA NA NA NA
rs7931369 NA NA NA NA NA NA NA NA NA NA
rs567411332 NA NA NA NA NA NA NA NA NA NA
rs184532784 NA NA NA NA NA NA NA NA NA NA
rs7931583 NA 1.000 NA NA NA NA NA NA NA NA
rs555937772 NA NA NA NA NA NA NA NA NA NA
rs9651750 NA 1.000 NA NA 1.000 NA NA NA NA NA
rs9651751 NA 1.000 NA NA 1.000 NA 1.000 NA NA NA
rs9651752 NA 1.000 NA NA 1.000 NA 1.000 1.000 NA NA
rs73530502 NA 0.116 NA NA 0.116 NA 0.116 0.116 0.116 NA
答案 1 :(得分:0)
将sep =“\ t”添加到read.table()
data <- read.table(file="line.txt", na.strings = "-", sep = "\t",
header=TRUE, stringsAsFactors=FALSE, fill=TRUE)