2017-06-26 9 views
0

フォルダ内のすべてのcsvファイル(同じ構造)に同じ関数を適用しようとしています - '古い'列に基づいて2つの新しい列を追加し、 csvと同じフォルダに同じ名前で保存します。簡単では、いくつかの例がほとんどlapply使用して、ことを行うためにここに存在しなければならない、しかし、私はエラーに実行し続ける:R:フォルダ内の複数のファイルに列を追加して保存する

Error in `$<-.data.frame`(`*tmp*`, "LAT", value = numeric(0)) : replacement has 0 rows, data has 3 

これは私のコードです:

my_files <- list.files(path="C:/PATH", pattern=".csv", full.names=T, recursive=FALSE) 
add_col <- function(my_files) { 
    mpa <- read.csv(my_files, header=T) 
    mpa$LAT <- mpa$lat_bin + 0.05 
    mpa$LON <- mpa$lon_bin + 0.05 
    return(mpa) 
    write.csv(mpa, 
      append = FALSE, 
      quote = FALSE, 
      sep = ",", 
      row.names = FALSE, 
      col.names = TRUE) 
} 

私は最善の方法がわかりませんよ大量のファイルに対してはこれを行う必要があります。ファイル

Df1 <- data.frame(lat_bin = c(50,40,70,6,8,4),lon_bin = (c(1,5,2,4,9,11))) 
Df2 <- data.frame(lat_bin = c(66, 77, 82, 65, 88, 43),lon_bin = (c(2,3,4,5,11,51))) 
Df3 <- data.frame(lat_bin = c(43,46,55,67,1,11),lon_bin = (c(7,6,5,9,11,15))) 
write.csv(Df1, "data_1.csv", row.names=F) 
write.csv(Df2, "data_2.csv", row.names=F) 
write.csv(Df3, "data_3.csv", row.names=F) 
+0

ファイルの例を投稿できますか? – RobertMc

+0

また、タスクに使用するコードを追加してください。この種のエラーはそれ自体ではあまり役に立ちません。 –

+0

あなたの 'lapply'呼び出しはどこですか?それだけでは、投稿されたコードは何もしてはいけません。 – Parfait

答えて

1

は、単に機能を1つのファイルを受信して​​、あなたがlapply内のファイルのリスト全体を渡すパラメータを変更するためにここで

は、いくつかのサンプルコードです。 infoとして、lappyはおそらく、リスト/ベクトル入力を受け取り、各入力リスト要素が関数に渡される等しい長さのリストを返す関数の適用ファミリの中で最も一般的です。カラムの値が変更とmy_files内のファイルの数に等しいデータフレームのリストを返す

具体ここRES、それぞれ。また、write.csvにファイル名がありませんでしたが、以下に_new接尾辞付きの新しいcsvファイルを保存します(エスケープするための二重スラッシュ、正規表現の特殊文字)。

my_files <- list.files(path="C:/PATH", pattern=".csv", full.names=T, 
         recursive=FALSE) 

add_col <- function(one_file) { 
    mpa <- read.csv(one_file, header=T) 
    mpa$LAT <- mpa$lat_bin + 0.05 
    mpa$LON <- mpa$lon_bin + 0.05 
    write.csv(mpa, 
      file = sub("\\.csv", "_new\\.csv", one_file), 
      append = FALSE, 
      quote = FALSE, 
      sep = ",", 
      row.names = FALSE, 
      col.names = TRUE) 
    return(mpa) 
} 

res <- lapply(my_files, function(i) add_col(i)) # LONGER VERSION 
res <- lapply(my_files, add_col)     # SHORTER VERSION 
+0

ありがとうございました!私はwrite.csvの設定が無視されているという警告メッセージをいくつか出していますが、うまく動作しているようです。ありがとうございました! – Kristina

+0

問題ありません!喜んで助けてください。 * sep *引数は 'write.csv'(常にカンマ)のために冗長なので、削除してみてください。これは通常、一般的な 'write.table'のために使用されます。 – Parfait

関連する問題