![](/img/trans.png)
[英]Import and Combine multiple csv files but change delimiter to | in R
[英]Import Multiple CSV Files, Run A Function, Then Combine Results Into A Dataframe In R
我想從一個文件夾中導入多個 CSV 文件,對它們運行一個函數,然后合並向量結果。
目前我正在像這樣導入 CSV 文件:
Arbys.Data <- read.csv("~/Desktop/CSV Restaurant Data/MR - ARBYS.csv")
BJs.Data <- read.csv("~/Desktop/CSV Restaurant Data/MR - BJS RESTERAUNT
& BREWERY.csv")
Bojangles.Data <- read.csv("~/Desktop/CSV Restaurant Data/MR - BOJANGLES
FAMOUS CHICKEN N BISCUITS.csv")
通過我的功能單獨運行它們
Arbys <- My.Function(Arbys.Data)
BJs <- My.Function(BJs.Data)
Bojangles <- My.Function(Bojangles.Data)
然后將結果組合成這樣的數據框
RP<-rbind.data.frame(Arbys,BJs,Bojangles)
我確定有一種更簡單的方法來使用 lapply 或其他東西。 我嘗試像這樣運行代碼
filenames<- list.files("~/Desktop/CSV Restaurant Data/", pattern ="*.csv")
list.df <- lapply(filenames, read.csv)
Data<-My.Function(list.df)
Data.Frame<- rbind.data.frame(Data)
但結果並沒有產生我想要的。
使用 tidyverse pkg,試試下面的
Data <- dir(path="~/Desktop/CSV Restaurant Data/",pattern = "*.csv",include.dirs = TRUE, full.names = TRUE)%>%
map(read_csv) %>% # map :: read_csv() from the readr package
reduce(rbind) # reduce :: with rbind into one dataframe
str(Data)
你快到了。 您需要執行其余步驟,然后將結果與lapply
do.call(rbind, ...)
結合起來:
Data<-lapply(list.df, My.Function)
Data.Frame<- do.call(rbind, Data)
應該很簡單。
setwd("C:/your_path_here")
fnames <- list.files()
csv <- lapply(fnames, read.csv)
result <- do.call(rbind, csv)
使用pmap
函數
require(purrr)
flist <- c('~/Desktop/CSV Restaurant Data/MR - ARBYS.csv', '~/Desktop/CSV Restaurant Data/MR - BJS RESTERAUNT & BREWERY.csv', '~/Desktop/CSV Restaurant Data/MR - BOJANGLES FAMOUS CHICKEN N BISCUITS.csv')
data.list <- pmap(list(flist), function(fname) {
f <- read.csv(fname)
r <- My.Function(f)
return(r)
})
as.data.frame(bind_rows(data.list))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.