如何读取R中的tab分隔文件?

时间:2015-11-24 15:35:43

标签: r file matrix

我正在阅读一个制表符分隔文件,它是使用以下代码的矩阵。

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

2 个答案:

答案 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)