【发布时间】:2017-12-11 16:09:50
【问题描述】:
我有一个文本文件,其中每一行都以已知的字符标识符开头(* 是分隔符):
AAA*123456789*.*.*.
BBB*123456789*.*.*.
CCC*123456789*.*.*.
.
.
.
ZZZ*123456789*.*.*.
问题在于即使以这种方式组织信息。从 AAA 到 ZZZ 的每一行代表此特定数据中的一条记录。因此,在那条 ZZZ 线之后,数据再次回到 AAA 直到 ZZZ。
除了使用for循环和逐行处理之外,有没有办法将大块的行从AAA带到ZZZ并基本上放在一行上,这样我之后就可以用分隔符分隔每一行了?
如果您对处理此类数据有任何其他建议,请告诉我。
谢谢,
【问题讨论】:
-
试试
tapply(lines, cumsum(grepl("^AAA"., lines)), FUN = paste, collapse="") -
我想我不久前看到了一个类似问题的优雅解决方案,它使用了
read.dcf,但我找不到它。一般的方法是使用readLines,然后使用split(lines, cumsum(grepl('^AAA', lines),为每个元素创建一个命名列表/数据框,然后在结果上调用do.call(rbind, ...)或等效项。如需完整答案,请使用更具代表性的示例数据进行编辑。