Цикл в R, чтобы прочитать много файлов - PullRequest
31 голосов
/ 22 апреля 2011

Мне было интересно, если кто-нибудь знает способ создания цикла, который загружает файлы / базы данных в R. Скажем, у меня есть такие файлы: data1.csv, data2.csv, ..., data100.csv.

В некоторых языках программирования вы можете сделать что-то вроде этих данных + {x} + .csv, система распознает их как datax.csv, а затем вы можете применить цикл.

Есть идеи?

Ответы [ 7 ]

50 голосов
/ 22 апреля 2011

Sys.glob() - еще одна возможность - его единственной целью является расширение или подстановка.

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

Это будет читать все файлы формы data[x].csv в список dataFiles, где [x]это ничто или что-либо.

[Обратите внимание, что это шаблон , отличный от того, что в ответе Джошуа.Там list.files() принимает регулярное выражение, тогда как Sys.glob() просто использует стандартные символы подстановки;какие подстановочные знаки могут использоваться, зависит от системы, подробности можно найти на странице справки ?Sys.glob.]

24 голосов
/ 22 апреля 2011

См. ?list.files.

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

Затем вы можете зацикливаться на myFiles.

7 голосов
/ 24 июня 2013

Я бы поместил все файлы CSV в каталог, создал список и сделал бы цикл для чтения всех файлов 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]]) 
5 голосов
/ 05 апреля 2016

Прочитать заголовки в файле, чтобы мы могли использовать их для замены в объединенном файле

library(dplyr)
library(readr)

list_file <- list.files(pattern = "*.csv") %>% 
  lapply(read.csv, stringsAsFactors=F) %>% 
   bind_rows 
3 голосов
/ 22 апреля 2011
fi<-list.files(directory_path,full.names=T)
dat<-lapply(fi,read.csv)

dat будет содержать наборы данных в списке

2 голосов
/ 19 октября 2017

Предположим, что ваши файлы имеют формат файла, который вы упомянули в своем вопросе, и что они находятся в рабочем каталоге.

Вы можете векторизовать создание имен файлов, если они имеют простую структуру именования.Затем примените функцию загрузки ко всем файлам (здесь я использовал пакет purrr , но вы также можете использовать lapply)

library(purrr)
c(1:100) %>% paste0("data", ., ".csv") %>% map(read.csv)
0 голосов
/ 18 августа 2017

Это может быть полезно, если у вас есть наборы данных для участников, например, по психологии / спорту / медицине и т. Д.

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) ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...