R 是否可以从同一文本文件中读取两个表?

R 是否可以从同一文本文件中读取两个表?,r,text-files,read.table,R,Text Files,Read.table,例如,如果我有一个包含以下文本的文本文件(mytext.txt): Table1 13 3 20 0 0 0 0 3 10 0 0 0 6 0 20 0 5 0 0 0 0 0 0 0 7 20 0 0 0 0 0 20 19 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0

例如,如果我有一个包含以下文本的文本文件(mytext.txt):

Table1

    13  3   20  0   0   0   0
    3   10  0   0   0   6   0
    20  0   5   0   0   0   0
    0   0   0   7   20  0   0
    0   0   0   20  19  0   0
    0   0   0   0   0   8   0
    0   0   0   0   0   0   13  

Table2
0
2
10
-5
3
-10
-5
我可以同时检索这两张表并获得两张表吗

因此,如果我打印数据表1,我将得到第一个表,如果我打印数据表2,我将得到第二个表

我知道,如果mytext.txt只有一个表,我可以执行以下操作:

table1 <- read.table("mytext.txt")
table11)假设输入文件是
tables.txt
,将这些行读入
,并将
names.ix
作为包含表名的行的索引——这些行被标识为以非减号或数字的字符开头。然后创建一个分组变量
grp
,该变量标识每行所属的表,将行拆分为这些组并读取每组行。它不使用包,可以处理文件中的任意数量的表

Lines <- readLines("tables.txt")
names.ix <- grep("^[^-0-9]", Lines)
grp <- Lines[names.ix][ cumsum(seq_along(Lines) %in% names.ix) ]
Read <- function(x) read.table(text = x)
L <- lapply(split(Lines[-names.ix], grp[-names.ix]), Read)
2)顺便说一句,如果您只需要第一张表,那么这就可以了:

library(data.table)
fread("tables.txt")
1)假设输入文件为
tables.txt
,将行读入
,并将
names.ix
作为包含表名的行的索引——这些行被标识为以非减号或数字的字符开头。然后创建一个分组变量
grp
,该变量标识每行所属的表,将行拆分为这些组并读取每组行。它不使用包,可以处理文件中的任意数量的表

Lines <- readLines("tables.txt")
names.ix <- grep("^[^-0-9]", Lines)
grp <- Lines[names.ix][ cumsum(seq_along(Lines) %in% names.ix) ]
Read <- function(x) read.table(text = x)
L <- lapply(split(Lines[-names.ix], grp[-names.ix]), Read)
2)顺便说一句,如果您只需要第一张表,那么这就可以了:

library(data.table)
fread("tables.txt")
1)假设输入文件为
tables.txt
,将行读入
,并将
names.ix
作为包含表名的行的索引——这些行被标识为以非减号或数字的字符开头。然后创建一个分组变量
grp
,该变量标识每行所属的表,将行拆分为这些组并读取每组行。它不使用包,可以处理文件中的任意数量的表

Lines <- readLines("tables.txt")
names.ix <- grep("^[^-0-9]", Lines)
grp <- Lines[names.ix][ cumsum(seq_along(Lines) %in% names.ix) ]
Read <- function(x) read.table(text = x)
L <- lapply(split(Lines[-names.ix], grp[-names.ix]), Read)
2)顺便说一句,如果您只需要第一张表,那么这就可以了:

library(data.table)
fread("tables.txt")
1)假设输入文件为
tables.txt
,将行读入
,并将
names.ix
作为包含表名的行的索引——这些行被标识为以非减号或数字的字符开头。然后创建一个分组变量
grp
,该变量标识每行所属的表,将行拆分为这些组并读取每组行。它不使用包,可以处理文件中的任意数量的表

Lines <- readLines("tables.txt")
names.ix <- grep("^[^-0-9]", Lines)
grp <- Lines[names.ix][ cumsum(seq_along(Lines) %in% names.ix) ]
Read <- function(x) read.table(text = x)
L <- lapply(split(Lines[-names.ix], grp[-names.ix]), Read)
2)顺便说一句,如果您只需要第一张表,那么这就可以了:

library(data.table)
fread("tables.txt")

不直接,但您可以尝试从我的“SOfun”软件包中读取.mtable

该方法类似于@G.Grothendieck的方法,但打包成一个函数,因此您可以简单地执行以下操作:

read.mtable("tables.txt", chunkId = "Table", header = FALSE)
# $Table1
#   V1 V2 V3 V4 V5 V6 V7
# 1 13  3 20  0  0  0  0
# 2  3 10  0  0  0  6  0
# 3 20  0  5  0  0  0  0
# 4  0  0  0  7 20  0  0
# 5  0  0  0 20 19  0  0
# 6  0  0  0  0  0  8  0
# 7  0  0  0  0  0  0 13
# 
# $Table2
#    V1
# 1   0
# 2   2
# 3  10
# 4  -5
# 5   3
# 6 -10
# 7  -5

chunkId
参数也可以是正则表达式,如'chunkId=“[a-Za-z]+”

不能直接使用,但您可以尝试从我的“SOfun”包中读取.mtable

该方法类似于@G.Grothendieck的方法,但打包成一个函数,因此您可以简单地执行以下操作:

read.mtable("tables.txt", chunkId = "Table", header = FALSE)
# $Table1
#   V1 V2 V3 V4 V5 V6 V7
# 1 13  3 20  0  0  0  0
# 2  3 10  0  0  0  6  0
# 3 20  0  5  0  0  0  0
# 4  0  0  0  7 20  0  0
# 5  0  0  0 20 19  0  0
# 6  0  0  0  0  0  8  0
# 7  0  0  0  0  0  0 13
# 
# $Table2
#    V1
# 1   0
# 2   2
# 3  10
# 4  -5
# 5   3
# 6 -10
# 7  -5

chunkId
参数也可以是正则表达式,如'chunkId=“[a-Za-z]+”

不能直接使用,但您可以尝试从我的“SOfun”包中读取.mtable

该方法类似于@G.Grothendieck的方法,但打包成一个函数,因此您可以简单地执行以下操作:

read.mtable("tables.txt", chunkId = "Table", header = FALSE)
# $Table1
#   V1 V2 V3 V4 V5 V6 V7
# 1 13  3 20  0  0  0  0
# 2  3 10  0  0  0  6  0
# 3 20  0  5  0  0  0  0
# 4  0  0  0  7 20  0  0
# 5  0  0  0 20 19  0  0
# 6  0  0  0  0  0  8  0
# 7  0  0  0  0  0  0 13
# 
# $Table2
#    V1
# 1   0
# 2   2
# 3  10
# 4  -5
# 5   3
# 6 -10
# 7  -5

chunkId
参数也可以是正则表达式,如'chunkId=“[a-Za-z]+”

不能直接使用,但您可以尝试从我的“SOfun”包中读取.mtable

该方法类似于@G.Grothendieck的方法,但打包成一个函数,因此您可以简单地执行以下操作:

read.mtable("tables.txt", chunkId = "Table", header = FALSE)
# $Table1
#   V1 V2 V3 V4 V5 V6 V7
# 1 13  3 20  0  0  0  0
# 2  3 10  0  0  0  6  0
# 3 20  0  5  0  0  0  0
# 4  0  0  0  7 20  0  0
# 5  0  0  0 20 19  0  0
# 6  0  0  0  0  0  8  0
# 7  0  0  0  0  0  0 13
# 
# $Table2
#    V1
# 1   0
# 2   2
# 3  10
# 4  -5
# 5   3
# 6 -10
# 7  -5

chunkId
参数也可以是正则表达式,如'chunkId=“[a-Za-z]+”

Now,如果我有以下文本文件:Now,如果我有以下文本文件:Now,如果我有以下文本文件:Now,如果我有以下文本文件: