解析txt文件并在R中提取信息

Parsing txt files and extracting information in R

我需要从文件之间具有不同结构的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,selecting by line no.并且一行内的间距对所有文件都不成功。

请问有没有人能告诉我有没有一种方法可以解析txt文件,然后通过关键字搜索,提取关键字后的信息?例如像 Flow Rate: 99.99 这样的东西,我想提取 99.99。 另一个问题是,使用 Flow Rate 示例,Flow Rate 会在每个文件中出现多次。有没有办法 alias/index 流量:这样我就可以 select,比如说,第三次出现?

欢迎任何提示或提示。我知道如何在识别关键字时打印整行,但不知道如何处理多次出现,并且只 select 关键字后面的数字:

all_data = readLines("Unit 5 2013.txt")
hours_of_operation <- grep("Annual Hours of Operation:    ",all_data)
all_data[hours_of_operation]
[1] "    Annual Hours of Operation:    8760.0 hours/yr"

谢谢

J

我猜您在要解析的每一行上都有一个数据点。如果是这样,您可以将数据读入一个向量并使用 grepl() 函数来查找具有您需要的向量的所有实例。

所以例如你有数据:

lhr: time to departure 5:00
dfw: time to arrival 4:40
jfk: time to arrival 5:50
dfw: time to departure 6:00
lax: time to departure 6:00

如果您想删除 "dfw: " 个条目,那么您可以

data = readLines("file.txt")
data[grepl("dfw: ", data)]

如果你想要这个的第二个条目,你做

data[grepl("dfw: ", data)][2]

以下内容可能有所帮助。我假设您将文本转换为字符向量

数据示例

注意:如果 "Flow Rate" 是大写字母,您可能需要先使用 tolower(ex)

ex<-c("The annual observed flow rate: 99.99")

正则表达式和正则匹配

此处 regexpr 搜索句点前后有两位数字的数字。

res<-regmatches(ex, regexpr("[0-9]{1,2}.[0-9]{1,2}",ex))

使用位置参数

另一种方法是使用库 cwhmisc。此解决方案搜索单词 "rate" 的起始位置。期望在您需要的数字后有 5 个位置,然后您可以对该数字进行子字符串化。

library(cwhmisc)
A<-cpos(ex,"rate", start=1) #position in string
res<-substr(ex, start=A+5, stop=A+9)

若多次出现流量

将向量的元素拆分为子字符串并像以前一样捕获数字。

ex<-c("The annual observed flow rate: 99.99; the monthly flow rate: 90.03; the weekly observed flow rate: 92.22")
ndat<-unlist(strsplit(ex, "flow"))