2017-08-04 6 views
0

Rで多くのcsvファイルをマージしようとしています。それらはすべて共通の列を共有しています。 csvファイルのしかし、私はこれを行う必要があるたびにすべての名前を入力するファイルが多すぎます。は、入力としてls()を使用して、Rs内のcsvファイルをマージする

これはうまく動作します:

test <- merge(quant_dysmorph_data.csv, srs_adult.csv, by = "individual", all 
= TRUE) 

私はあまりにも正常に見えるmergeコマンドの入力として似たようなことができます:

cat(ls(pattern = ".csv"), sep = ",") 

戻り値: bapq.csv、bapq_raw.csvを、 bapq_recode.csv、fhi_informant.csv、fhi_interviewer.csv、fhi_subject.csv、quant_dysmorph_data.csv、srs_adult.csvなど(ごめんなさい、コメントボックスは出力として正しくフォーマットされません...)

私はmergeコマンドの入力としてこれを使用するとき

はしかし、私はエラーを取得する:

x <- merge(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all = 
TRUE) 

戻り値:あなたの助けを事前に

Error in as.data.frame(y) : argument "y" is missing, with no default 
7.as.data.frame(y) 
6.as.data.frame(y) 
5.nrow(y <- as.data.frame(y)) 
4.merge.data.frame(as.data.frame(x), as.data.frame(y), ...) 
3.merge(as.data.frame(x), as.data.frame(y), ...) 
2.merge.default(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all 
= TRUE) 
1.merge(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all = TRUE) 

感謝を。

+0

'cat'が使用されている:あなただけの.csvさんの完全なフォルダをマージするために探している場合は、一人一人が共通の変数で一緒にマージされますする必要があり

、あなたはこれを行うことができます画面に印刷する。 NULLオブジェクトを返します。あなたはおそらくdata.framesのリストを使って作業したいと思うでしょう。詳細については、[この投稿](https://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)を参照してください。 – lmo

+0

これまで、私は〜40の.csvファイルを独自のサブディレクトリに保存した後、setwd()とdir()を使ってループするファイル名のベクトルを取得しました。 –

答えて

0

ソリューションでls()を使用する必要がある場合は、これは役に立ちません。

setwd('Drive:/Folder/Subfolder') 

fnms<-subset(dir(),substr(dir(),nchar(dir())-3,nchar(dir()))=='.csv') 

x<-read.csv(fnms[1]) 

    for (i in 2:length(fnms)){ 
temp<-read.csv(fnms[i]) 
    x <- merge(x,temp, by = "individual", ###or whatever variable you're merging on 

all = TRUE) 
    } 
+0

こんにちはChristopher、 ご意見ありがとうございます。これは機能しますが、最終データフレームに多数の列が重複して表示されます。列の複製をマージする方法を知っていますか? 私はdplyrで結合機能を試しましたが、実際のデータではなく出力にNAsが含まれています – Brian

+0

rm(list = ls()) ファイル名< - list.files(path = "。Father"、full.names = TRUE) import.list <--llply(filenames、read.csv) data < - full_join(as.data.frame(import.list [1])、as.data.frame(import.list [2] )) for(i in 3:length(import.list)){ data < - left_join(data、as.data.frame(import.list [i])) } – Brian

+0

各繰り返しのようなものを試すことができますマージの前に:current.varnames = names(x)[which(names(x)!= "Individual")]; temp <-subset(read.csv(fnms [i])、select = which(%current.varnamesの(!(names(x)%))) –

関連する問題