Подтвердить что ты не робот

Loop в R для чтения многих файлов

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

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

Любые идеи?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

См. ?list.files.

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

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

Ответ 3

Я бы поместил все 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]]) 

Ответ 4

fi<-list.files(directory_path,full.names=T)
dat<-lapply(fi,read.csv)

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

Ответ 5

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

library(dplyr)
library(readr)

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

Ответ 6

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

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

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

Ответ 7

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

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) ) )