2016-11-03 5 views
-1

Rでは、各ファイルをディレクトリごとに1つずつデータフレームとして抽出し、単純なクロス列計算を実行します。元のファイル名の一部を保存しながら、結果のデータフレームをcsvとしてエクスポートします。ディレクトリ内のすべてのファイルに対して関数を実行し、ファイル名をRで保存する

私は、以下の4つのファイルが持っている Path/To/Directoryに例えば

:各ファイルには、次のようになりますデータフレームを持ってい

Prot1-Combined_Scores.csv 
Prot2-Combined_Scores.csv 
Prot3-Combined_Scores.csv 
Prot4-Combined_Scores.csv 

を:

 V1 V2 V3 V4  V5  V6  V7 
1 CHEM001 0.000 0 0 0.684255 0.91599 0.671794 
2 CHEM002 0.048 4 1   0 0.953549 0.691595 
3 CHEM003 0.287 1 0 0.011915 0.970648 0.854309 
4 CHEM004 0.298 0 2 0.136784 0.984207 0.86979 
5 CHEM005 0.000 1 0 0.578534 0.995675 0.695794 

私は、その列V8を作りたいですたとえば、(V2+V3+V6+V7)^2 + 2*V4 + V5/3を計算します。

最後に、私はそうで、そのようなProt2ためProt1-Final_Score.csv、と同じ、Prot3として、元のファイル名のProt1一部が保存された名前のcsvファイルとして最終データフレームを保存したい、とします。

私はRの新人です。lapplyは、ディレクトリ内のすべてのファイルに対して関数を実行するのに便利ですが、特に私が言及した計算をlapplyに統合し、ファイル名から必要な文字列を抽出するのに役立ちます後でエクスポートする。

+0

あなたはこれまでに何をしていますか? – HubertL

答えて

1

希望します。より良い学習ができるように、あなたの努力やアプローチを共有してください!

path="Path/To/Directory/" 
x=list.files(path = path, pattern = ".csv") 
final_pathname = paste0(path, x) 

L=lapply(seq_along(final_pathname), abc) 

abc <- function(i){ 
    df = read.csv(final_pathname[i]) 
    df$V8 = (df$V2+df$V3+df$V6+df$V7)^2 + 2*df$V4 + df$V5/3) 
    write.csv(df,file = paste0(path,paste0(unlist(strsplit(x[i],".csv")) 
            ,"-Final_copy"),".csv")) 
} 
関連する問題