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

Sha*_*ang 4 parsing r tab-delimited data.table

我正在尝试解析制表符分隔的数据,该数据已保存为具有无关数据的文本文件.我希望这是一个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
...
Run Code Online (Sandbox Code Playgroud)

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

1092    -   1093    +   1X
Run Code Online (Sandbox Code Playgroud)

B始终有两列:

1093    HRDCPMRFYT
Run Code Online (Sandbox Code Playgroud)

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

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

1092    -    1093    +    1X    1093    HRDCPMRFYT
1093    +    1094    -    1X    1094    BSZSDFJRVF
1094    +    1095    +    1X    1095    SSTFCLEPVV
... 
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 5

您可以使用运行shell命令fread.在Win10中,您甚至可以运行一些Linux实用程序,例如sed

因此,你可以做到

fread("sed '$!N;s/\\n/ /' test.tab")
#      V1 V2   V3 V4      V5         V6
# 1: 1092  - 1093  + 1X 1093 HRDCPMRFYT
# 2: 1093  + 1094  - 1X 1094 BSZSDFJRVF
# 3: 1094  + 1095  + 1X 1095 SSTFCLEPVV
Run Code Online (Sandbox Code Playgroud)

(从这里采用sed语法)


数据

text <- "1092    -   1093    +   1X
1093    HRDCPMRFYT
1093    +   1094    -   1X
1094    BSZSDFJRVF
1094    +   1095    +   1X
1095    SSTFCLEPVV"

# Saving it as tab separated file on disk
write(gsub(" +", "\t", text), file = "test.tab")
Run Code Online (Sandbox Code Playgroud)