从文本文件中读取由R中的标识符分隔的行块的最佳/最快方法

从文本文件中读取由R中的标识符分隔的行块的最佳/最快方法,r,parsing,text,R,Parsing,Text,我有一个文本文件,其中每行都以已知的字符标识符开始(*是分隔符): 问题是即使信息是这样组织的。从AAA到ZZZ的每一行代表此特定数据中的一条记录。所以在ZZZ行之后,数据再次回到AAA,直到ZZZ 除了使用for循环和逐行处理之外,有没有其他方法可以将从AAA到ZZZ的行块基本上放在一行上,这样我就可以在那之后用分隔符分隔出每一行 或者,如果您对处理此类数据有任何其他建议,请告诉我 谢谢,使用注释末尾的示例数据将其读入数据框,创建分组变量g,然后使用重塑将其从长格式转换为宽格式。没有使用任何软

我有一个文本文件,其中每行都以已知的字符标识符开始(*是分隔符):

问题是即使信息是这样组织的。从AAA到ZZZ的每一行代表此特定数据中的一条记录。所以在ZZZ行之后,数据再次回到AAA,直到ZZZ

除了使用for循环和逐行处理之外,有没有其他方法可以将从AAA到ZZZ的行块基本上放在一行上,这样我就可以在那之后用分隔符分隔出每一行

或者,如果您对处理此类数据有任何其他建议,请告诉我


谢谢,

使用注释末尾的示例数据将其读入数据框,创建分组变量
g
,然后使用
重塑
将其从长格式转换为宽格式。没有使用任何软件包
text=行
可以替换为文件名,例如,如果输入来自文件,则可以替换为“myfile”

DF <- read.table(text = Lines, sep = "*", as.is = TRUE, strip.white = TRUE)
DF$g <- cumsum(DF$V1 == "AAA")
reshape(DF, dir = "wide", idvar = "g", timevar = "V1")

DF我们可以使用
tapply
粘贴
元素

tapply(lines, cumsum(grepl("^AAA", lines)), FUN = paste, collapse="")
也不使用任何包

数据
lines试试
taply(lines,cumsum(grepl(“^AAA”),FUN=paste,collapse=”“)
我想我刚才看到了一个类似问题的优雅解决方案,它使用了
read.dcf
,但我找不到它。一般的方法是使用
readLines
,然后使用
拆分(lines,cumsum(grepl(“^AAA”,lines)
,为每个元素创建一个命名列表/数据框,然后调用
do.call(rbind,…)
或对结果进行等效处理。要获得完整答案,请使用更具代表性的示例数据进行编辑。
Lines <- "AAA*123456789*.*.*.
BBB*123456789*.*.*.
CCC*123456789*.*.*.
AAA*123456789*.*.*.
BBB*123456789*.*.*.
CCC*123456789*.*.*."
tapply(lines, cumsum(grepl("^AAA", lines)), FUN = paste, collapse="")
lines <- readLines(textConnection("AAA*123456789*.*.*.
BBB*123456789*.*.*.
CCC*123456789*.*.*.
ZZZ*123456789*.*.*.
AAA*123456789*.*.*.
BBB*123456789*.*.*.
CCC*123456789*.*.*.
ZZZ*123456789*.*.*."))