在R中读取文本文件中的分组

在R中读取文本文件中的分组,r,R,我有一个包含许多分组部分的文本文件,如下所示(每组中的数字明显不同)。我想获取每个分组中的所有X、Y和Z列,并将它们放入一个数据帧中。我怎么能这样做?我还想添加一个指示符列来标识行来自哪个分组 下面是文本文件外观的基本布局 Start Date: 02/05/2020 Start Time: 16:00:14 Time X Y Z ============ ===== ===== =====

我有一个包含许多分组部分的文本文件,如下所示(每组中的数字明显不同)。我想获取每个分组中的所有X、Y和Z列,并将它们放入一个数据帧中。我怎么能这样做?我还想添加一个指示符列来标识行来自哪个分组

下面是文本文件外观的基本布局

Start Date:                 02/05/2020
Start Time:                 16:00:14

  Time         X     Y     Z
============   ===== ===== =====
000:00:00.05    3.50  9.00  8.50
000:00:00.10    3.50  8.50  9.00
000:00:00.15    5.00  8.00  9.50
000:00:00.20    5.00  9.00  8.50
000:00:00.25    5.00  9.00  6.50
000:00:00.30    3.50  9.50  7.00


Start Date:                 02/05/2020
Start Time:                 16:00:14

  Time         X     Y     Z
============   ===== ===== =====
000:00:00.05    3.50  9.00  8.50
000:00:00.10    3.50  8.50  9.00
000:00:00.15    5.00  8.00  9.50
000:00:00.20    5.00  9.00  8.50
000:00:00.25    5.00  9.00  6.50
000:00:00.30    3.50  9.50  7.00


Start Date:                 02/05/2020
Start Time:                 16:00:14

  Time         X     Y     Z
============   ===== ===== =====
000:00:00.05    3.50  9.00  8.50
000:00:00.10    3.50  8.50  9.00
000:00:00.15    5.00  8.00  9.50
000:00:00.20    5.00  9.00  8.50
000:00:00.25    5.00  9.00  6.50
000:00:00.30    3.50  9.50  7.00
我尝试使用此代码,但只能得到每个分组的第一行

export <- list.files(path=wd, pattern = "one.Export")
options(warn=-1)
dat <- readLines(export)
x_dat <- read.table(text = dat[grep("Start Time:", dat) + 4])[,2:4]

export这种文本解析的问题是必须依赖问题中指定的精确格式的文本

这适用于您的示例,但可能需要针对您自己的实际数据进行修改:

库(tidyverse)
readLines(“~/data.txt”)%>%#将文件读入字符串向量
粘贴(collapse=“\n”)%%>%#用换行符将它们粘在一起
strsplit(“开始日期:+”)%>%#在关键字处将它们分成若干组
未列出%>%
`[`(-1)%>%#删除空的第一个元素
lapply(函数(x)未列出(strsplit(x,“\n”))%>%#在换行符处雕刻
lappy(函数(x)grep(“\\d”,x,value=TRUE))%>%#只保留带数字的行
lapply(函数(x)strsplit(x,“+”))%>%#在空间上雕刻
搭接(函数(x)cbind(表示(粘贴(x[[1]],x[[2]][3]),长度(x)-2),
do.call(rbind,x[-c(1:2)])%>%#绑定成行并添加标签
{do.call(rbind,.)}%>%#将组粘在一起
as.data.frame()%>%
设置名称(c(“组日期”、“时间”、“X”、“Y”、“Z”))#生成数据帧并命名
#>组_日期时间X Y Z
#> 1  02/05/2020 16:00:14 000:00:00.05 3.50 9.00 8.50
#> 2  02/05/2020 16:00:14 000:00:00.10 3.50 8.50 9.00
#> 3  02/05/2020 16:00:14 000:00:00.15 5.00 8.00 9.50
#> 4  02/05/2020 16:00:14 000:00:00.20 5.00 9.00 8.50
#> 5  02/05/2020 16:00:14 000:00:00.25 5.00 9.00 6.50
#> 6  02/05/2020 16:00:14 000:00:00.30 3.50 9.50 7.00
#> 7  02/05/2020 16:00:14 000:00:00.05 3.50 9.00 8.50
#> 8  02/05/2020 16:00:14 000:00:00.10 3.50 8.50 9.00
#> 9  02/05/2020 16:00:14 000:00:00.15 5.00 8.00 9.50
#> 10 02/05/2020 16:00:14 000:00:00.20 5.00 9.00 8.50
#> 11 02/05/2020 16:00:14 000:00:00.25 5.00 9.00 6.50
#> 12 02/05/2020 16:00:14 000:00:00.30 3.50 9.50 7.00
#> 13 02/05/2020 16:00:14 000:00:00.05 3.50 9.00 8.50
#> 14 02/05/2020 16:00:14 000:00:00.10 3.50 8.50 9.00
#> 15 02/05/2020 16:00:14 000:00:00.15 5.00 8.00 9.50
#> 16 02/05/2020 16:00:14 000:00:00.20 5.00 9.00 8.50
#> 17 02/05/2020 16:00:14 000:00:00.25 5.00 9.00 6.50
#> 18 02/05/2020 16:00:14 000:00:00.30 3.50 9.50 7.00

由(v0.3.0)

于2020-02-24创建如果您的数据都在一个文件中,为什么您需要
列表。文件
?有时同一文件夹中有多个文本文件需要使用不同的脚本运行。但是对于分组,文本文件的格式都是相同的。
x_dat <- read.table(text = dat[grep("Start Time:", dat) + 4])[1:5,2:4]