包含多个表的单个文本文件

时间:2014-12-11 16:04:15

标签: r

我正在尝试从包含多个表的单个文本文件中导入数据。表格的长度各不相同,但每个表格之间有相同的分配。每个表之间的分隔是一个数字,后跟一个字符。例如,

19,EOP
1,10.,92.9144,202.1271,0,B,10-Dec-2014 11:46

2,5.,0.,153.3754,0.,,10-Dec-2014 11:52

3,5.,20380.8867,162.0626,24555.9395,,10-Dec-2014 11:58

4,5.,21941.2773,197.9289,25361.4414,,10-Dec-2014 12:04

10,EOP
1,0.98,164702.1563,179.828,0,B,10-Dec-2014 09:46

2,1.08,0.,180.6869,0.,,10-Dec-2014 09:48

3,1.07,0.,190.6853,0.,,10-Dec-2014 09:50

4,1.32,0.,163.7527,0.,,10-Dec-2014 09:52

5,1.29,0.,167.3766,0.,,10-Dec-2014 09:54

我一直在尝试使用read table函数,但我似乎无法使用该函数来识别表指示符。

2 个答案:

答案 0 :(得分:6)

您可以尝试使用我的GitHub read.mtable中的"SOfun" package

使用您共享的样本数据保存在名为" test.txt"的文件中。在我目前的工作目录中,我尝试了以下内容:

library(SOfun) ## Or just copy and paste the function for your session...
read.mtable("test.txt", chunkId = "\\d+,EOP", header = FALSE, sep = ",")
# $`19,EOP`
#   V1 V2         V3       V4       V5 V6                V7
# 1  1 10    92.9144 202.1271     0.00  B 10-Dec-2014 11:46
# 2  2  5     0.0000 153.3754     0.00    10-Dec-2014 11:52
# 3  3  5 20380.8867 162.0626 24555.94    10-Dec-2014 11:58
# 4  4  5 21941.2773 197.9289 25361.44    10-Dec-2014 12:04
# 
# $`10,EOP`
#   V1   V2       V3       V4 V5 V6                V7
# 1  1 0.98 164702.2 179.8280  0  B 10-Dec-2014 09:46
# 2  2 1.08      0.0 180.6869  0    10-Dec-2014 09:48
# 3  3 1.07      0.0 190.6853  0    10-Dec-2014 09:50
# 4  4 1.32      0.0 163.7527  0    10-Dec-2014 09:52
# 5  5 1.29      0.0 167.3766  0    10-Dec-2014 09:54

正如您所看到的,如果您查看源代码,该函数是read.table的基本包装器,其中包含一些其他行,以帮助确定每轮read.table要跳过的行数。


显然,改变你的" chunkID"参数代表你的表名实际上是: - )

答案 1 :(得分:3)

您无法使用我所知道的任何基本R功能执行此操作。你可以做的是读取所有数据,然后用正则表达式(或其他东西)找到​​断点,然后解析每个块。例如

lines <- readLines("data.csv")
group <- cumsum(grepl("^\\d+,\\w+$", lines))  #number,character

lapply(split(lines, group), function(x) read.table(text=x[-1], sep=","))

获取

$`1`
  V1 V2         V3       V4       V5 V6                V7
1  1 10    92.9144 202.1271     0.00  B 10-Dec-2014 11:46
2  2  5     0.0000 153.3754     0.00    10-Dec-2014 11:52
3  3  5 20380.8867 162.0626 24555.94    10-Dec-2014 11:58
4  4  5 21941.2773 197.9289 25361.44    10-Dec-2014 12:04

$`2`
  V1   V2       V3       V4 V5 V6                V7
1  1 0.98 164702.2 179.8280  0  B 10-Dec-2014 09:46
2  2 1.08      0.0 180.6869  0    10-Dec-2014 09:48
3  3 1.07      0.0 190.6853  0    10-Dec-2014 09:50
4  4 1.32      0.0 163.7527  0    10-Dec-2014 09:52
5  5 1.29      0.0 167.3766  0    10-Dec-2014 09:54