根据R的条件将文件名添加为行名

时间:2018-09-12 15:42:55

标签: r write.table rowname

我找到了这个问题的一些变体,并尝试了所有可能的方法,但没有帮助。我已经能够提取内容,但是我也希望在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

2 个答案:

答案 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")