Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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_Dplyr - Fatal编程技术网

如何从子目录导入文件并使用子目录名R命名

如何从子目录导入文件并使用子目录名R命名,r,dplyr,R,Dplyr,我想从子目录递归地导入文件(长度不同),并将其放入一个data.frame中,其中一列包含子目录名,另一列包含文件名(不包含扩展名): 到目前为止,我已经: setwd("~/Documents/IsolatedData") l <- list.files(pattern = ".out$",recursive = TRUE) p <- bind_rows(lapply(1:length(l), function(i) {chars <- strsplit(l[i], "/")

我想从子目录递归地导入文件(长度不同),并将其放入一个data.frame中,其中一列包含子目录名,另一列包含文件名(不包含扩展名):

到目前为止,我已经:

setwd("~/Documents/IsolatedData")
l <- list.files(pattern = ".out$",recursive = TRUE)
p <- bind_rows(lapply(1:length(l), function(i) {chars <- strsplit(l[i], "/");
cbind(data.frame(Pressure = read.table(l[i],header = FALSE,skip=2, nrow =length(readLines(l[i])))),
      Angle = chars[[1]][1], Location = chars[[1]][1])}), .id = "id")
setwd(“~/Documents/IsolatedData”)
你能试试吗

library(tidyverse)    

tbl <-
  list.files(recursive = T, pattern = ".out$") %>% 
  map_dfr(read_table, skip = 2, .id = "filepath")
库(tidyverse)
待定%
映射dfr(读取表格,跳过=2,.id=“文件路径”)

这是一个工作流,其中包含tidyverse中
purrr
map
功能

我生成了一堆csv文件来模拟您的文件结构和一些简单的数据。我在每个文件的开头插入了两行垃圾数据,因为你说你试图跳过前两行

库(tidyverse)
setwd(“~/\u R/SO/nested”)
漫游(粘贴0(“文件夹”,1:3),直接创建)
list.files()%>%
步行(功能(folderpath){
地图(1:4,功能(i){

df我从您的程序中猜测“.out”文件由一列数据组成?如果是这样,您可以使用scan而不是read.table。我还猜测您希望文件夹名称位于名为Angle的列中,即文件名(减去扩展名)在名为Location的列中,以及名为Pressure的列中的数据。如果这是正确的,则应使用以下方法:

setwd("~/Documents/IsolatedData")
l <- list.files(pattern = "\\.out$", recursive = TRUE)
p <- data.frame()
for (i in seq_along(l)){
  pt <- data.frame(Angle = strsplit(l[i], "/")[[1]][1],
                   Location = sub("\\.out", "", l[i]),
                   Pressure = scan(l[i], skip=2))
  p <- rbind(p, pt)
}
setwd(“~/Documents/IsolatedData”)

l“我不能让它工作”问题出在哪里?tidy verse示例实际上并没有导入数据,只是给了我一个文件名的TIBLE小要点,没有尝试回答:模式应该是“\\.out$”。您拥有的模式将匹配任何以“out”结尾的内容。谢谢。文件以两行标题分隔,我需要跳过。我可以用read_csv代替read_table(skip=2)吗?是的read
purr::map
documentation:谢谢。我在这里遗漏了一些东西,尽管它使TIBLE有65行(64行包含NA)。我能得到的最接近的答案是使用我的第一段代码,但它只有在一个文件夹中才能正常工作。非常感谢。我已将read_csv替换为read_table2,并在read_table2中添加了以下内容:col_types=cols(TimeStep=col_integer(),Value=col_character())当然,
readr
函数中有很多选项:
read\u tsv
用于制表符分隔,或者
read\u table
用于由其他空白集分隔的列
library(tidyverse)    

tbl <-
  list.files(recursive = T, pattern = ".out$") %>% 
  map_dfr(read_table, skip = 2, .id = "filepath")
setwd("~/Documents/IsolatedData")
l <- list.files(pattern = "\\.out$", recursive = TRUE)
p <- data.frame()
for (i in seq_along(l)){
  pt <- data.frame(Angle = strsplit(l[i], "/")[[1]][1],
                   Location = sub("\\.out", "", l[i]),
                   Pressure = scan(l[i], skip=2))
  p <- rbind(p, pt)
}