r - 从文本文件中提取数据

标签 r

在其他语言中似乎有类似的问题,但我在 R 中找不到。

我在一个目录的子目录中有许多文本文件;它们都有扩展名 (.log),并且包含文本和数据的混合。我想从这些相对较大的文件中提取几行。

例如,一个文件如下...

blahblahblah

NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS =  210

blahblahblah

 ----------------------------------------<br />
 CPU timing information for all processes<br />
 ========================================<br />
 0: 8853.469 + 133.948 = 8987.417<br />
 1: 8850.817 + 126.587 = 8977.405<br />
 2: 8851.925 + 128.576 = 8980.501<br />
 3: 8847.992 + 125.871 = 8973.864<br />
 ----------------------------------------<br />
 ddikick.x: exited gracefully.<br />

blahblahblah

我想收集基函数的数量(本例中为 210)和 CPU 时间总量。

“NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS =”这一行对于每个文件都是唯一的;即,如果我在文本编辑器中打开文件并使用此字符串进行搜索,我只返回这一行。与“所有进程的 CPU 计时信息”和“正常退出”类似。

我很感激我似乎没有做很多事情来帮助自己,但我只是不知道从哪里开始。如果有人能指出我正确的方向,我希望能够填补其余部分。

在@Ben(见下文)给我的帮助之后,这是我最终使用的代码,
filesearch <- function (x) {

f <- readLines(x)
cline <- grep("NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS",f,
                    value=TRUE)
val <- as.numeric(str_extract(cline,"[0-9]+$"))
coline <- grep("^ +CPU timing information", f)
numstr <- sapply(str_extract_all(f[coline+2:5],"[0-9.]+"),as.numeric)
cline1 <- sum(numstr[4,])/60
output <- c(val, cline1)
return(cat(output,"\n"))
}

我找到了这个函数并键入了我每次需要的文件,然后我手动将两个结果传输到另一个文件。没有我想要的那么优雅,但这样做为我节省了很多时间。再次感谢@Ben。

最佳答案

也许

library(stringr)
f <- readLines("datafile.txt")
cline <- grep("NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS",f,
                    value=TRUE)
val <- as.numeric(str_extract(cline,"[0-9]+$"))

将工作?

要获得其他值,请尝试
cline <- grep("^ +CPU timing information",f)
(numstr <- sapply(str_extract_all(f[cline+2:5],"[0-9.]+"),as.numeric))
##         [,1]     [,2]     [,3]     [,4]
## [1,]    0.000    1.000    2.000    3.000
## [2,] 8853.469 8850.817 8851.925 8847.992
## [3,]  133.948  126.587  128.576  125.871
## [4,] 8987.417 8977.405 8980.501 8973.864
sapply已经转置了值的矩阵,所以最后一行是我们想要的位(对应于文件中的最后一列)。使用 numstr[4,] 提取它或 numstr[nrow(numstr),]tail(numstr,1) .

( 编辑 :在“CPU 计时”字符串之前允许空格)
( 编辑 :做对了!)

(要对所有日志文件执行此操作,请将其打包在一个函数中,然后将 list.files(pattern="\\.log$")sapply 结合使用 ...)

关于r - 从文本文件中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261776/

相关文章:

c++ - 如何在 Rcpp/C++ 中将函数作为参数传递?

r - 为 gbm 交互强度实现零分布

r - 在 R 中将数据从行转换为列

r - mutate_column 使用 dplyr 中的计算列名

performance - 如何最大化原生 R 脚本的性能(将运行数千次)?

r - 使用 R 从 Pubmed 数据中的隶属关系中提取大学名称

r - 将函数应用于数据框列(dplyr)

r - R Plotly 中的自定义颜色

r - 如何将 openstreetmap 与 R 中的点结合起来

html - 如何在 R 中使用 readHTMLTable 读取注释掉的 HTML 表格