2016-09-25 16 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)] 

したがって、上記の3つの列が機能し、file01から削除されます。しかし、私はfiles02からfiles20まで繰り返すことはできませんし、それらのすべてから列を削除することはできません。何か案は?どうもありがとうございます!

+1

使用lapply、リスト内のデータフレーム。この[post](http://stackoverflow.com/questions/11433432/importing-multiple-csv-files-into-r)を参照してください。 – zx8754

+1

ようこそ!あなたのコンピュータ上のファイルをRタグで参照するのではなく、再現可能な例を提供することを頼みます(組み込みデータセットを使用するか、 'dput()'でコードを共有できます)。 –

+0

'setwd(path)'と 'list.files(path ="。 "、pattern ="^.file。\\ csv $ "、full.names = TRUE)を使うとあなたの人生も楽になると思います – Nate

答えて

0

zx8754は言及@として、lapply()は、ご使用の環境内のすべてのコンパイル済みリスト中のデータフレームの代わりに、複数のオブジェクトを維持する(だけでなく、下にどのように出力にリストから個々の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

これはコメントである理由がわかりません。例:Do not note: 'mycols'が先頭に移動しました。 – Parfait

関連する問題