Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析txt文件并提取R中的信息_R_String_Parsing_Extract - Fatal编程技术网

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

解析txt文件并提取R中的信息,r,string,parsing,extract,R,String,Parsing,Extract,我需要从文件之间结构不同的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,因此并非所有文件都能成功地按行号和行距进行选择 我想知道是否有人能告诉我,是否有一种方法可以解析txt文件,按关键字搜索,并在关键字后提取信息?例如,类似于流速:99.99,我想提取99.99。 另一个问题是,使用流速示例,流速会在每个文件中出现多次。是否有一种方法可以别名/索引流速:以便我可以在第三次出现时进行选择 欢迎提供任何提示或提示。我知道在识别关键字时如何打印整行,但不知道如何处理多次出现的情况,

我需要从文件之间结构不同的文本文件中提取信息。虽然这可以使用宏来完成,但由于文件是可变的,因此并非所有文件都能成功地按行号和行距进行选择

我想知道是否有人能告诉我,是否有一种方法可以解析txt文件,按关键字搜索,并在关键字后提取信息?例如,类似于流速:99.99,我想提取99.99。 另一个问题是,使用流速示例,流速会在每个文件中出现多次。是否有一种方法可以别名/索引流速:以便我可以在第三次出现时进行选择

欢迎提供任何提示或提示。我知道在识别关键字时如何打印整行,但不知道如何处理多次出现的情况,以及只选择关键字后面的数字:

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"
all_data=readLines(“Unit 5 2013.txt”)

操作的小时数我猜您要解析的每行上都有一个数据点。如果是这样,您可以将数据读入一个向量,并使用
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]

以下内容可能会有所帮助。我假设您将文本带到了字符向量

数据示例

注意:如果“流量”为大写,则您可能需要首先使用
tolower(ex)


Ex组合
grep
sub
regexpr
是否不起作用?仅这些就可以为您提供一个向量(每个文件),从中可以通过编程方式任意选择第三个(或其他)元素。@JThomp:我很想知道这些答案是否有助于您找到问题的解决方案?@RuthgerRighart对延迟表示抱歉-这是一个旨在加快进程的辅助项目。不过,感谢您的信息,虽然这使我能够在出现时选择和索引行,但我很难从数字大小非常可变的字符串中选择数字。预先选择小数位数需要预先了解数值。另一个问题是,在文件中有一些带有列的表,我只需要从行中提取一个值。现在,通过扩展选择[0-9]{1,9}.[e-e0-9]{1,9}[+-][0-9]{1,9},可以解决这个问题。我担心这可能会导致它从字符串中的下一个单词中提取不需要的信息,但显然它只适用于我正在寻找的离散sting。谢谢你的帮助!
ex<-c("The annual observed flow rate: 99.99")
res<-regmatches(ex, regexpr("[0-9]{1,2}.[0-9]{1,2}",ex))
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"))