2016-09-25 118 views
0

我想從我導入的超過20個數據框中刪除列。但是,當我嘗試遍歷所有這些文件時,出現錯誤。當我對單個文件名進行硬編碼時,我可以放棄,但只要我嘗試遍歷所有文件,就會出現錯誤。這裏是代碼:子集中的一個循環中的多個數據幀R

path <- "C://Home/Data/" 
files <- list.files(path=path, pattern="^.file*\\.csv$") 

for(i in 1:length(files)) 
{ 
    perpos <- which(strsplit(files[i], "")[[1]]==".") 
    assign(
    gsub(" ","",substr(files[i], 1, perpos-1)), 
    read.csv(paste(path,files[i],sep=""))) 
} 

mycols <- c("test," "trialruns," "practice") 

`file01` = `file01`[,!(names(`file01`) %in% mycols)] 

所以,上面的工作將從file01中刪除這三列。但是,我無法通過files02遍歷文件20並從所有文件中刪除列。有任何想法嗎?非常感謝!

+1

使用lapply,保持所有數據框在列表中。例如,參見[post](http://stackoverflow.com/questions/11433432/importing-multiple-csv-files-into-r)。 – zx8754

+1

歡迎來到SO!我們要求您提供一個可重複的示例(您可以使用內置數據集或通過'dput()'共享您的代碼),而不是在R標籤中引用計算機上的文件。 –

+0

我想用'setwd(path)'和'list.files(path =「。」,pattern =「^ .file。\\ csv $」,full.names = TRUE)''會讓你的生活更輕鬆 – Nate

回答

0

正如@ zx8754提到,考慮lapply()保持在一個彙總列表而不是多個對象的所有dataframes在您的環境中(但低於還包括從列表如何輸出單個DFS):

path <- "C://Home/Data/" 
files <- list.files(path=path, pattern="^.file*\\.csv$") 
mycols <- c("test," "trialruns," "practice") 

# READ IN ALL FILES AND SUBSET COLUMNS 
dfList <- lapply(files, function(f) { 
    read.csv(paste0(path, f))[mycols] 
}) 

# SET NAMES TO EACH DF ELEMENT 
dfList <- setNames(dfList, gsub(".csv", "", files)) 

# IN CASE YOU REALLY NEED INDIVIDUAL DFs 
list2env(dfList, envir=.GlobalEnv) 

# IN CASE YOU NEED TO APPEND ALL DFs 
finaldf <- do.call(rbind, dfList) 

# TO RETRIEVE FIRST DF 
dfList[[1]] # OR dfList$file01 
+0

謝謝這麼多建議。當試圖運行這段代碼時,我得到:「錯誤:意外符號在:」#爲每個DF元素設置名稱dfList「 – jayz323

+0

不確定爲什麼你會這樣做,因爲這是一條評論。仔細檢查你的實現與此相比例如,請注意:'mycols'移動到頂端。 – Parfait

相關問題