R 具有多个表的单个文本文件
我试图从一个包含多个表的文本文件中导入数据。这些表格的长度各不相同,但它们之间有一个共同的比例。每个表之间的分隔是一个数字后跟一个字符。比如说,R 具有多个表的单个文本文件,r,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,253
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函数,但我似乎无法使用该函数识别表指示器。您可以尝试仅从我的GitHub使用
使用您共享的保存在我当前工作目录中名为“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”参数更改为代表表名的实际名称:-)我所知道的任何基本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=","))
非常好,我正要发布类似的东西,使用
readChar
而不是readLines
+1这很好,现在我有一个问题,就是要将所有这些内容导出回多个文本文件,这样我的同事就可以使用excel导入这些数据。我知道,我知道,EXCEL=gross,但他们还没有被启发。@MadmanLee,这是一个列表,所以你可以使用类似于lappy的东西(你的列表,write.csv,otherargumentstowritecsv)
。
$`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