R:包含多个标题的列表 - 如何按标题拆分(每个标题行不等)

R: List with multiple headings - How to split by heading (unequal lines per heading)

我有一个大文件,如下所示:

Heading1
1 ABC
2 DEF
Heading2
1 GHI
2 JKL
3 MNO
Heading3
1 PQR
2 STU

标题始终具有相同的模式,但每个标题下的条目不同 — 条目数量不同,没有共同的模式,字母数量不同 and/or 个单词。

我想将一个列表拆分为多个列表,即每个标题一个新列表。我该如何解决?

你能试试这个吗?

mylist = list("Heading1", "1 ABC", "2 DEF", "Heading2", "1 GHI", "2 JKL", "3 MNO", "Heading3", "1 PQR", "2 STU")
idx = unlist(lapply(mylist, function(x) as.numeric(regexpr("heading", x, ignore.case=T))))
idx[which(idx == -1)] = 0
idx = cumsum(idx)
myotherlist = vector("list", max(idx))
for (i in 1:length(mylist)) myotherlist[[idx[i]]] = append(myotherlist[[idx[i]]], mylist[i])

这就是我要做的:

header_positions <- grepl("^Heading", test)
header_positions

grouping_index <- cumsum(header_positions)
grouping_index

li <- split(test[!header_positions], grouping_index[!header_positions])
li

setNames(li, test[header_positions]) # if you want to have fancy names :)

我认为 cumsum(grepl(...)) 模式对于这种列表拆分任务非常有用。

如果你想通过 writeLines() 写出来,你需要将列表元素转换为 character 向量 unlist():

for(n in names(li)) {
  writeLines(unlist(li[[n]]), paste0(n, ".txt"))
} 

这是迭代列表名称的另一种有用模式,因此您可以直接访问名称(对于文件名)并使用它们为列表编制索引(对于文件内容)。