2017-01-29 6 views
-1

私はRで初心者で、332ファイルから列sulfの平均を計算しなければなりません。以下の平均式は1つのファイルでうまくいきます。問題は、ファイル全体を計算しようとするときに発生します。複数の.csvファイルにまたがる1つの列の平均を計算する方法は?

恐らく、すべてのファイルを読み込んで、mydataに保存してもうまくいかないのでしょうか?私を助けてくれますか?以下のように

感謝

pollutantmean <- function(specdata,pollutant=xor(sulf,nit),i=1:332){ 
      specdata<-getwd() 
      pollutant<-c(sulf,nit) 

      for(i in 1:332){ 
       mydata<-read.csv(file_list[i]) 
      } 


      sulfate <- (subset(mydata,select=c("sulfate"))) 
      sulf <- sulfate[!is.na(sulfate)] 
      y <- mean(sulf) 


     print(y) 


    } 
+0

?各ファイルの平均を個別に計算し、ベクトルに格納し、_all_filesの平均を計算します...? – bouncyball

+0

@bouncyball私は後者が真実だと信じています。ここで使うツールは 'list.files'と' lapply'/'sapply'です。 –

答えて

0

これはテストされていませんが、手順は次のとおりです。この種の質問に何度も繰り返し尋ねられていることに注意してください(例:here)。 「複数のファイルに作業する」、「バッチ処理する」、「多くのファイルを読み込む」などの検索を試みてください。

lx <- list.files(pattern = ".csv", full.names = TRUE) 

# gives you a list of 
xy <- sapply(lx, FUN = function(x) { 
    out <- read.csv(x) 
    out <- out[, "sulfate", drop = FALSE] # do not drop to vector just for fun 
    out <- out[is.na(out[, "sulfate"]), ] 
    out 
    }, simplify = FALSE) 

xy <- do.call(rbind, xy) # combine the result for all files into one big data.frame 
mean(xy[, "sulfate"]) # calculate the mean 
# or 
summary(xy) 

RAMが不足している場合は、これを少し最適化できます。

+0

なぜ 'sapply'と* simplify = FALSE *?単に 'lapply'と呼ぶのはなぜですか? – Parfait

+0

@Parfaitの個人的な選択、理由はありません。 –

0

ご協力いただきありがとうございます。

私はそれを選別しました。キーはlist.filesとrbind(mydata、...)の中でfull.names = TRUEを使うことでした。そうでなければ、ファイルを1つずつ読み込んでお互いの後に追加しませんでした。これは私の目的です。

以下。私はそれがほとんどの「R」ソリューションであるかどうかわからないのですが、それは動作します

 pollutantmean<-function(directory,pollutant,id=1:332){ 
     files_list <- list.files(directory, full.names=TRUE) 
     mydata <- data.frame() 
      for (i in id) {         
      mydata <- rbind(mydata, read.csv(files_list[i])) 
      } 


       if(pollutant %in% "sulfate") 
       { 
        mean(mydata$sulfate,na.rm=TRUE) 

        } 
       else 
       {if(pollutant %in% "nitrate") 
      { 
      mean(mydata$nitrate,na.rm=TRUE) 
      } 
      else 
      {"wrong pollutant" 
      } 
      } 
     } 

`

正確に何をしようとする
関連する問題