导入具有多种记录类型的文件

时间:2018-05-20 21:42:33

标签: r

如何将具有多种记录类型的文件(例如标题和详细信息)读入R中的数据框?

例如,数据看起来像

HAAABBB
D12345
D23456
HCCCDDD
D67890

...

我想制作一个这样的数据框:

v1  v2  v3 
AAA BBB 12345
AAA BBB 23456
CCC DDD 67890

readline似乎很麻烦,并使用rownumber来确定每个细节的标题记录。

我曾经使用一种名为Monarch的软件来打开这些类型的文件,但是,对于大文件来说它很慢。

1 个答案:

答案 0 :(得分:0)

您可以将文件中的所有行读入R,然后根据定义的规则处理它们:

# read input file
rawtext <- readLines("FileName")

rawtext
# [1] "HAAABBB" "D12345"  "D23456"  "HCCCDDD" "D67890"

# get locations of headers and values
headers.loc <- which (startsWith(rawtext,"H"))
values.loc <- which (startsWith(rawtext,"D"))

# extract values
values <- substring(rawtext[values.loc],2)

# find locations of corresponding headers
hv <- sapply(values.loc,FUN=function(x){ max(which( x-headers.loc >0)) })

# create a dataframe
df <- data.frame(v1 = substring(rawtext[headers.loc[hv]], 2, 4), 
                 v2 = substring(rawtext[headers.loc[hv]], 5, 7), 
                 v3 = values)


df
#    v1  v2    v3
# 1 AAA BBB 12345
# 2 AAA BBB 23456
# 3 CCC DDD 67890