我找到了这个问题的一些变体,并尝试了所有可能的方法,但没有帮助。我已经能够提取内容,但是我也希望在CSV文件的每一行中都具有与之相关的文件名:如果在“ .txt”文件中找到了内容(“ Flash Point”),则提取内容并将“ .txt”文件名指定为csv中的关联行名。如果找不到内容,则跳过内容和文件,然后进行下一个提取。任何帮助将不胜感激。这里的问题是,行名称是根据特定条件给出的。这是初始代码。非常感谢您的帮助
for (i in 1:length(txt)){
doc<-readLines(txt[i])
doc<-doc[grepl("Flash point",doc)]
lst[[txt[[i]]]]<-doc %>% stringr::str_extract("(\\d|>).*")
results<-lst[[txt[[i]]]]
write.table(results,file = "outputestrod.csv",row.names = FALSE,col.names = FALSE,sep = ",", append = TRUE)
}
我在这里添加一个示例 Content Extracted Content Extracted with Files names As row if specific content value found
建议的results<-paste(txt[i],lst[[txt[[i]]]])
的结果
Results
答案 0 :(得分:0)
听起来您需要使用paste()命令来组合两个字符串,文件名和文件内容。
尝试更改行
results<-lst[[txt[[i]]]]
对此:
results<- paste(txt, lst[[txt[[i]]]] )
答案 1 :(得分:0)
这是我认为您要尝试做的整洁的版本。如果您想学习这样的代码,请考虑资源http://r4ds.had.co.nz/。您的循环没有利用R的向量运算。
library(tidyverse)
filenames <- dir(your folder)
file_and_content_with_string <- function(filename, string){
doc<-readLines(filename)
doc<-doc[grepl(string,doc)]
file_text <- doc %>% stringr::str_extract("(\\d|>).*")
results <- data.frame(filename = filename, content = file_text)
}
all_results <- map_df(filenames, function(x) file_and_content_with_string(x, "Flash point"))
write_csv(all_results, "outputestrod.csv")