2017-02-25 4 views
0

私はRを初めて使い、別々のデータフレームとしてファイルのリストを読み込み、それぞれに対していくつかの操作を行い、動的ファイル名を持つ別々のファイルとして保存したいと考えています。私はラッフィーを使うべきだと思っているが、確かではない。ここでディレクトリ内のファイルのリストに対していくつかの演算を繰り返し、新しい動的ファイル名をR、Lapplyで保存しますか?

を1つのファイルのために働く、私が書いたコードです:

df <- read.fwf('USC00011084.dly', widths = c(21, rep(c(5, 1, 1, 1),31))) 

df2 <- df[-c(3:5, 7:9, 11:13, 15:17, 19:21, 23:25, 27:29, 31:33, 35:37, 39:41, 43:45, 47:49, 51:53, 55:57, 59:61, 63:65, 67:69, 71:73, 75:77, 79:81, 83:85, 87:89, 91:93, 95:97, 99:101, 103:105, 107:109, 111:113, 115:117, 119:121, 123:125)] 

df2[df2=="-9999"]<-NA 

df$new <- rowSums(df2[,2:32], na.rm = TRUE) 

df2["Total"] <- df$new 

colnames(df2) <- c("StationDateType", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "28", "30", "31", "TotalMonthly") 

Prcp <- df2[grep("PRCP", df2$StationDateType),] 

write.table(Prcp, "USC00011084Prcp.txt", sep="\t", row.names=FALSE) 

どのように私は、ディレクトリ内のファイルのリストについては、これを行うことができますか?何か案は?ありがとうございました。

+2

「動的」とは何ですか?そして 'list.files'を検索しましたか? SOには、何百もの_already__answered_質問が存在するはずです。 –

+0

ありがとうございました - 私は他の著者の推薦を使用することができましたし、Sys.globを使用して代替案をまとめました。 – user2267031

答えて

0

あなたはこれを試すことができます... あなたはあなたのファイルのリストを取得することができます

files <- list.files(getwd()) 

が希望分析を行い、あなたが行ったように、テーブルに結果を書き込み機能を記述します。ここでtools :: file_path_sans_extを使用してファイル名の拡張子を除いてファイルを展開し、最後にtxtに保存するテーブルの名前を付けます。

myFunction <- function(files){ 
    fileName <- tools::file_path_sans_ext(files) 
    df <- read.fwf(files, widths = c(21, rep(c(5, 1, 1, 1),31))) 
    # rest of your code 
    # ... 
    write.table(Prcp, paste0(fileName, "Prcp.txt"), sep="\t", row.names=FALSE) 
} 

lapplyを使用すると、ファイル内の各ファイルに対して関数を実行できます。

lapply(files, function(x) myFunction(x)) 
+0

@ R.S.これありがとう。私はあなたの指示に従って、それはうまく動作します。一つの質問があります。私は、6つのテストファイルにlapply実行した後、私は、次の受信: [[1]] NULL [[2]] NULL [[3]] NULL [[4]] NULLこれが何を意味するのか [[5]] NULL [[6]] NULL 任意のアイデア?生成された.txtファイルは正常に表示されます。再びThx。 – user2267031

+0

@ user2267031 'lapply'は関数を初期リストに適用した結果を同じ長さのリストに出力します。この場合はmyFunctionの最後の行です。最後の行は 'write.table'なので、返すものはありません。もしあなたが好きなら、この行をwrite.table 'print(paste(" Saving: "、paste0(fileName、" Prcp.txt ")))'の後に追加し、出力を見ることができます。 – Djork

関連する問題