【发布时间】:2020-08-11 15:59:44
【问题描述】:
我有大量的文本文件。每个文件都作为观察值存储在数据框中。每个观察都包含多个字段,因此每个对象中都有一些结构。我希望根据每个文件中的结构化信息来拆分每个文件。
数据目前采用以下结构(简化):
a <- c("Name: John Doe Age: 50 Address Please give full address 22 Main Street, New York")
b <- c("Name: Jane Bloggs Age: 42 Address Please give full address 1 Lower Street, London")
df <- data.frame(rawtext = c(a,b))
我想将每个观察结果拆分为单独的变量列。它最终应该是这样的:
Name Age Address
John Doe 50 22 Main Street, New York
Jane Bloggs 42 1 Lower Street, London
我认为这可以相当简单地使用一个预定义的分隔符向量来完成,因为每个文本对象都是结构化的。我试过使用 stringr 和 str_split() 但这不处理向量输入。例如
delims <- c("Name:", "Age", "Address Please give full address")
str_split(df$rawtext, delims)
我可能在这里过于简单化了。我能想到的唯一另一种方法是遍历每个观察并提取所有字段的 delims[1] 之后和 delims[2] 之前的所有文本(依此类推)。
例如以下 bodge 将为我提供基于分隔符的名称字段:
sub(paste0(".*", delims[1]), "", df$rawtext[1]) %>% sub(paste0(delims[2], ".*"), "", .)
[1] " John Doe "
这感觉效率极低。我错过了更好的方法吗?
【问题讨论】: