解析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"))
我需要从文件之间具有不同结构的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,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"))