Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
根据带R的条件将文件名添加为行名_R_Write.table_Rowname - Fatal编程技术网

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

根据带R的条件将文件名添加为行名,r,write.table,rowname,R,Write.table,Rowname,我已经找到了这个问题的一些变体,并尝试了所有的可能性,但没有帮助。我已经能够只提取内容,但我希望在CSV文件中的每一行也关联文件名:如果在“.txt”文件中找到内容(“闪点”),则提取内容并将“.txt”文件名作为CSV中的关联行名。如果找不到内容,只需跳过内容和文件并转到下一个提取。任何帮助都将不胜感激。这里的问题是,行名称是根据特定条件给出的。这是初始代码。非常感谢你的帮助 for (i in 1:length(txt)){ doc<-readLines(txt[i]) doc

我已经找到了这个问题的一些变体,并尝试了所有的可能性,但没有帮助。我已经能够只提取内容,但我希望在CSV文件中的每一行也关联文件名:如果在“.txt”文件中找到内容(“闪点”),则提取内容并将“.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)
}
for(i in 1:length(txt)){

doc听起来您需要使用paste()命令来组合两个字符串:文件名和文件内容

试着换线

results<-lst[[txt[[i]]]] 

<>代码>结果这里是我想做的一个TyDyRead版本。如果你想学习这样的代码,考虑资源。你的循环不利用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")
库(tidyverse)

文件名请制作一个可复制的示例。我真的不知道你在尝试做什么,你的代码片段也没有帮助。谢谢@divibisan的快速回复。我通过添加两个示例编辑了我的文章。第一个示例显示我能够提取内容。第二个是期望的结果:如果文件extrac中存在特定内容t它并关联文件名。否则跳过它。感谢lotThanks djchapman。根据您的建议,我们几乎就到了。问题是我在同一个单元格中有两个结果(文件名+提取的内容)。我希望它们在同一行的不同列中(例如单元格(1,1)=文件名,单元格(1,2)=内容)。我将结果放在最初的帖子中。谢谢,尝试结果非常感谢提供的资源,我查看了它,它看起来很棒。我也尝试了上面的方法,但我收到了错误消息“error:loadNamespace中'tidyverse'的包或命名空间加载失败”(j是的,我确实先安装了软件包,然后在运行库时出现错误。现在我关闭了所有内容并重新打开R,尝试再次运行它。我得到的结果是:installed.packages(“tidyverse”)软件包LibPath版本优先级取决于导入链接建议增强许可证许可证\u是自由/开源许可证\u限制\u使用操作系统类型Archs MD5sum Needs编译生成>谢谢我不知道错误原因。如果tidyverse是一条死胡同,您是否尝试了我在第一个答案的注释中建议使用旧for循环的行?结果这是我得到的错误:data.frame中的错误(file=txt[I],content=txt[I],lst[[txt[[I]]]):参数表示不同的行数:1,0。是否缺少任何内容?非常感谢您的时间。非常感谢Hi djchapman,我尝试了tidyverse,现在它正在工作。唯一的问题是代码的最后一行不工作。如果我能够解决这一行,我将不会有问题。这是我运行它时收到的信息:>all\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")