按指定的列长度将ASCII数据读入R.

时间:2017-07-14 14:22:23

标签: r database

如果你在文本编辑器中打开它,我有一个大的ASCII文件,如下所示:

11112223423 4434 555534 5533 54534 5354 5532 434 4 43434 23424234 34 4534 34453 345345345 345344 344 43423453453 43444 99098 234090 4354550 345399 43453 9900 4

我已经获得了列的映射。例如:第一个变量位于第1-9列。第二列位于104-105。等等。

有没有一种简单的方法可以将这种类型的数据读入R中,以便最终得到一个data.frame?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我已将标准read.fwf()用于此类事情。

我也喜欢readr包中的read_fwf()。例如:

#create some dummy fixed-width-field data
fixed_width_data <- "line1  field1 datafield2 dataetc\nline2  field1 datafield2 dataetc\n"

#specify the data columns
field_info <- fwf_widths(c(7, 11, 11, 3), col_names=c("line_number", "field1", "field2", "fieldn"))

#read it in
parsed <- read_fwf(fixed_width_data,  field_info)

要指定数据列的开始/结束位置,您可以使用fwf_positions()代替fwf_widths()

#create some dummy fixed-width-field data
fixed_width_data2 <- "line1  field1 datafield2 dataTEXT TO SKIPetc\nline2  field1 datafield2 dataTEXT TO SKIPetc\n"

#specify the data columns using start and end positions
field_info2 <- fwf_positions(start=c(1, 8, 19, 42), end=c(5, 18, 29, 44), col_names=c("line_number", "field1", "field2", "fieldn"))

#read it in
parsed2 <- read_fwf(fixed_width_data2,  field_info2)

答案 1 :(得分:0)

您可以使用read.fwf(固定宽度字段)在基准R中执行此操作 我用你的单行输入写了一个文件,得到了:

FullFile = read.fwf("Test.txt", widths=c(9,94,2))
Interesting = FullFile[,c(1,3)]
Interesting
         V1 V3
1 111122234 42

请注意,我正在读取列以跳转到变量,然后只丢弃该变量。