2016-04-15 5 views
0

これは4つのcsvファイルのそれぞれに対して、より多くのファイルを使用するforループを作成しようとしました。Rループは複数のcsvファイルで機能を実行します

dat1<- read.csv("female.csv", header =T) 
dat2<- read.csv("male.csv", header =T) 

for (i in 1:2) { 
    message("Female, Male") 
    Temp <- dat[i][(dat[i]$NAME == "Temp"), ] 
    Temp <- Temp[complete.cases(Temp)] 
    print(mean(Temp$MEAN)) 

はしかし、私はエラーを取得する:なぜこれが動作しない

Error in Temp$MEAN : $ operator is invalid for atomic vectors

わかりません。任意の助けがcsvファイルを介してループのために評価されるだろう!

+1

forループであなたの閉じる '}'はどこですか? – WillardSolutions

+1

'dat [1]'は 'dat'の最初の要素です。 'dat1'は別のオブジェクトです! – jogo

+0

おそらく、複数のファイルを読み込む最良の方法は、それらをリストに入れることです。例については、次のリンクを参照してください:http://stackoverflow.com/questions/19501040/using-read-csv-in-a-for-loop – lmo

答えて

0

は個人的に、私はこれを行う最も簡単な方法は、plyrパッケージであると思う:

library(plyr) 
myFiles <- c("male.csv", "female.csv") 
dat <- ldply(myFiles, read.csv) 
dat <- dat[complete.cases(dat), ] 
mean(dat$MEAN) 

これが機能する方法は、あなたが最初のファイル名のベクトルを作成することです。次に、ldply()関数は、ファイル名のベクトルに対してread.csv()関数を実行し、出力を自動的にdata.frameに変換します。その後、通常の方法でcomplete.cases()とmean()を行います。

編集:

各ファイルの平均をしたい場合はしかし、その後、ここでそれを行うための一つの方法は次のとおりです。

# create a vector of files 
myFiles <- c("male.csv", "female.csv") 

# create a function that properly handles ONLY ONE ELEMENT 
readAndCalc <- function(x){   # pass in the filename 
    tmp <- read.csv(x)     # read the single file 
    tmp <- tmp[complete.cases(tmp), ] # complete.cases() 
    mean(tmp$MEAN)      # mean 
} 

x <- "male.csv" 
readAndCalc(x)       # test with ONE file 

sapply(myFiles, readAndCalc)   # run with all your files 

これが機能する方法は、あなたが最初にだけ、ファイル名のベクトルを作成することです以前のように。次に、一度に1つのファイルのみを処理する関数を作成します。次に、作成したばかりのreadAndCalc関数を使用して関数が動作することをテストできます。最後に、sapply()関数を使用してすべてのファイルに対して行います。希望が役立ちます。

+0

私はあなたがRの初心者であることがわかります。 Rの学習の初めにも問題があります。これは、あなたが「思考中」になるまでは正常です。心配ない。あなたはすぐにアイデアを得るでしょう。 – hackR

+0

ありがとう、それは動作しますが、すべてのファイルを結合するようです。私は各ファイルのために別々の出力を得たいと思う。そういうわけで、私は彼らを巡って考えました。 – user6210879

関連する問題