Je me demandais si quelqu'un connaissait un moyen de créer une boucle qui charge des fichiers/bases de données dans R. . Disons que j'ai des fichiers comme celui-ci: data1.csv, data2.csv, ..., data100.csv.
Dans certains langages de programmation, vous pouvez faire quelque chose comme ceci data + {x} + .csv, le système le reconnaît comme datax.csv, et vous pouvez ensuite appliquer la boucle.
Des idées?
Sys.glob()
est une autre possibilité - son seul but est d’agrandir ou d’agrandir le caractère générique.
dataFiles <- lapply(Sys.glob("data*.csv"), read.csv)
Cela lira tous les fichiers de la forme data[x].csv
dans la liste dataFiles
, où [x]
ne représente rien ou rien.
[Notez que ceci est un pattern différent de celui de la réponse de @ Joshua. Là, list.files()
prend une expression régulière, alors que Sys.glob()
utilise uniquement des caractères génériques standard; les caractères génériques pouvant être utilisés dépendent du système, des détails peuvent être utilisés disponibles à la page d'aide ?Sys.glob
.]
Voir ?list.files
.
myFiles <- list.files(pattern="data.*csv")
Ensuite, vous pouvez boucler myFiles
.
Je mettrais tous les fichiers CSV dans un répertoire, créerais une liste et ferais une boucle pour lire tous les fichiers CSV du répertoire dans la liste.
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]])
Lire les en-têtes d'un fichier pour pouvoir les utiliser dans un fichier fusionné
library(dplyr)
library(readr)
list_file <- list.files(pattern = "*.csv") %>%
lapply(read.csv, stringsAsFactors=F) %>%
bind_rows
fi<-list.files(directory_path,full.names=T)
dat<-lapply(fi,read.csv)
dat contiendra les jeux de données dans une liste
Supposons que vos fichiers ont le format de fichier que vous avez mentionné dans votre question et qu'ils se trouvent dans le répertoire de travail.
Vous pouvez vectoriser la création des noms de fichiers s'ils ont une structure de nommage simple. Puis appliquez une fonction de chargement sur tous les fichiers (ici, j'ai utilisé purrr package, mais vous pouvez aussi utiliser lapply
)
library(purrr)
c(1:100) %>% paste0("data", ., ".csv") %>% map(read.csv)
Cela peut être utile si vous avez des ensembles de données pour les participants tels que psychologie/sport/médecine, etc.
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) e.g. get the mean of certain parts of each participant
mw_extraktion <- function(data_raw){
data_raw <- data.frame(data_raw)
#you may now calculate e.g. the mean for a certain variable for each ID
ID <- data_raw$ID[1]
data_OneID <- c(ID, Var2, Var3) #put your new variables (e.g. Means) here
} #end of function
data_combined <- t(data.frame(sapply(read.all, mw_extraktion) ) )