web-dev-qa-db-ja.com

Rでループして多くのファイルを読み取る

Rのファイル/データベースをロードするループを作成する方法を誰かが知っているかどうか疑問に思っていました。

一部のプログラミング言語では、このデータ+ {x} + .csvのような処理を行うことができます。システムはdatax.csvのように認識し、ループを適用できます。

何か案は?

33
DonC

Sys.glob()は別の可能性です-唯一の目的はグロブまたはワイルドカード拡張です。

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

これは、フォーム_data[x].csv_のすべてのファイルをリストdataFilesに読み込みます。ここで、_[x]_は何もまたは何もありません。

[これは@ -Joshua's Answerのpatternとは異なることに注意してください。 list.files()は正規表現を使用しますが、Sys.glob()は標準のワイルドカードのみを使用します。使用できるワイルドカードはシステムに依存します。使用できる詳細はヘルプページ_?Sys.glob_で見つけることができます。]

51
Gavin Simpson

見る ?list.files

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

その後、myFilesをループできます。

25
Joshua Ulrich

すべての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]]) 
7
PAC

マージされたファイルの置換に使用できるように、ファイルのヘッダーを読み取ります

library(dplyr)
library(readr)

list_file <- list.files(pattern = "*.csv") %>% 
  lapply(read.csv, stringsAsFactors=F) %>% 
   bind_rows 
5
fi<-list.files(directory_path,full.names=T)
dat<-lapply(fi,read.csv)

datにはリスト内のデータセットが含まれます

3
CDX

ファイルに質問で言及したファイル形式があり、作業ディレクトリにあると仮定しましょう。

ファイル名の構造が単純な場合、ファイル名の作成をベクトル化できます。次に、すべてのファイルにロード関数を適用します(ここでは purrr パッケージを使用しましたが、lapplyも使用できます)

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

これは、心理学/スポーツ/医学などの参加者用のデータセットがある場合に役立ちます。

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