在R加载文件循环

我一直在想,如果有人知道一种方式来创build一个循环加载文件/数据库在R说我有这样的一些文件:data1.csv,data2.csv,…,data100.csv。

在一些编程语言中,你可以做这样的数据+ {x} + .csv,系统将它识别为datax.csv,然后你可以应用这个循环。

有任何想法吗?

Sys.glob()是另一种可能性 – 唯一的目的是通配符或通配符扩展。

 dataFiles <- lapply(Sys.glob("data*.csv"), read.csv) 

这将读取表单data[x].csv所有文件到列表dataFiles ,其中[x]是什么也没有。

[请注意这是@约书亚的答案中的一个不同的模式 。 在那里, list.files()需要一个正则expression式,而Sys.glob()只是使用标准通配符。 可以使用的通配符是系统依赖的,可以使用的细节可以在帮助页面find?Sys.glob 。]

?list.files

 myFiles <- list.files(pattern="data.*csv") 

然后你可以遍历myFiles

我会把所有的CSV文件放在一个目录中,创build一个列表,然后循环读取列表中目录中的所有csv文件。

 setwd("~/Documents/") ldf <- list() # creates a list listcsv <- dir(pattern = "*.csv") # creates the list of all the csv files in the directory for (k in 1:length(listcsv)){ ldf[[k]] <- read.csv(listcsv[k]) } str(ldf[[1]]) 
 fi<-list.files(directory_path,full.names=T) dat<-lapply(fi,read.csv) 

dat将包含列表中的数据集

阅读文件中的标题,以便我们可以使用它们replace合并的文件

 library(dplyr) library(readr) list_file <- list.files(pattern = "*.csv") %>% lapply(read.csv, stringsAsFactors=F) %>% bind_rows 

如果您有心理学/运动/医学等参与者的数据集,这可能会有所帮助。

 setwd("C:/yourpath") temp <- list.files(pattern = "*.sav") #Maybe you want to unselect /delete IDs DEL <- grep('ID(04|08|11|13|19).sav', temp) temp2 <- temp[-DEL] #Make a list of that contains all data read.all <- lapply(temp2, read_sav) #View(read.all[1]) #Option 1: put one under the next df <- do.call("rbind", read.all) Option 2: make something within each dataset (single IDs) eg get the mean of certain parts of each participant mw_extraktion <- function(data_raw){ data_raw <- data.frame(data_raw) #you may now calculate eg the mean for a certain variable for each ID ID <- data_raw$ID[1] data_OneID <- c(ID, Var2, Var3) #put your new variables (eg Means) here } #end of function data_combined <- t(data.frame(sapply(read.all, mw_extraktion) ) ) 

假设您的文件具有您在问题中提到的文件格式,并且它们位于工作目录中。

如果它们具有简单的命名结构,则可以vector化创build文件名。 然后在所有的文件上应用一个加载函数(这里我使用了purrr包,但是也可以使用lapply

 library(purrr) c(1:100) %>% paste0("data", ., ".csv") %>% map(read.csv)