Rのファイル/データベースをロードするループを作成する方法を誰かが知っているかどうか疑問に思っていました。
一部のプログラミング言語では、このデータ+ {x} + .csvのような処理を行うことができます。システムはdatax.csvのように認識し、ループを適用できます。
何か案は?
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
_で見つけることができます。]
見る ?list.files
。
myFiles <- list.files(pattern="data.*csv")
その後、myFiles
をループできます。
すべての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]])
マージされたファイルの置換に使用できるように、ファイルのヘッダーを読み取ります
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にはリスト内のデータセットが含まれます
ファイルに質問で言及したファイル形式があり、作業ディレクトリにあると仮定しましょう。
ファイル名の構造が単純な場合、ファイル名の作成をベクトル化できます。次に、すべてのファイルにロード関数を適用します(ここでは purrr パッケージを使用しましたが、lapply
も使用できます)
library(purrr)
c(1:100) %>% paste0("data", ., ".csv") %>% map(read.csv)
これは、心理学/スポーツ/医学などの参加者用のデータセットがある場合に役立ちます。
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) ) )