如何将制表符分隔的数据(不同格式)解析为data.table / data.frame?

时间:2018-05-13 12:07:03

标签: r parsing data.table tab-delimited

我正在尝试解析制表符分隔的数据,该数据已保存为包含无关数据的文本文件。我希望这是一个R data.table / data.frame。

制表符分隔格式如下:

A   1092    -   1093    +   1X
B   1093    HRDCPMRFYT
A   1093    +   1094    -   1X
B   1094    BSZSDFJRVF
A   1094    +   1095    +   1X
B   1095    SSTFCLEPVV
...

只有两种类型的行,A和B.一直有5列,例如第一行,

1092    -   1093    +   1X

B始终有两列:

1093    HRDCPMRFYT

问题:如何使用不同格式的“交替”行解析文件?

假设这是一个文本文件,只有这种格式,交替的A和B行,分别有5列和2列。你如何将其解析为R data.table?我的想法是如何创建以下格式:

1092    -    1093    +    1X    1093    HRDCPMRFYT
1093    +    1094    -    1X    1094    BSZSDFJRVF
1094    +    1095    +    1X    1095    SSTFCLEPVV
... 

1 个答案:

答案 0 :(得分:4)

一种方法是使用readLines读取数据,拉出所需的位,然后传递给read.table以形成数据帧。因此,如果行是交替的,那么:

txt <- 
'1092    -   1093    +   1X
1093    HRDCPMRFYT
1093    +   1094    -   1X
1094    BSZSDFJRVF
1094    +   1095    +   1X
1095    SSTFCLEPVV'


rd <- readLines(textConnection(txt))
data.frame(read.table(text=rd[c(TRUE, FALSE)]), 
           read.table(text=rd[c(FALSE, TRUE)]))

textConnection(txt)更改为您的文件路径

另一种方法是只读入一次然后再处理

r <- read.table(text=txt, fill=TRUE, stringsAsFactors=FALSE, na.strings = "")
d <- cbind(r[c(TRUE, FALSE),], r[c(FALSE, TRUE),])
d[ colSums(is.na(d)) < nrow(d)]