デスクトップにあるフォルダーから複数の.csvファイルを読み込み、これらすべての.csvファイルを1つのdata.frameにマージして、各ファイルの名前を含む列を作成したいと思います。
私が試してみました:
my.path <- "C:/Users/JB/Desktop/RawFiles/"
filenames <- paste(my.path, list.files(path=my.path), sep="/")
my.df <- do.call(rbind, lapply(filenames, function(x) cbind(read.csv(x), name=strsplit(x,'\\.')[[1]][1])))
ただし、my.dt$name
.csvのファイル名は含まれていません。むしろ、ファイルの場所が含まれています。たとえば、次をhead(my.dt, 3)
生成します。
name
1 C:/Users/JB/Desktop/RawFiles//Analysis_01122016
2 C:/Users/JB/Desktop/RawFiles//Analysis_01122016
3 C:/Users/JB/Desktop/RawFiles//Analysis_01122016
これを編集my.dt$name
してfile.nameのみを生成するにはどうすればよいですか?私の予想される出力は次のとおりです。
name
1 Analysis_01122016
2 Analysis_01122016
3 Analysis_01122016
ありがとう!
まず、パスに変数を使用する必要はありません。のfull.names = TRUE
議論list.files
はあなたのためにそれをします。
ファイル名と拡張子だけが必要な場合は、次を使用できます。
basename("full/path/to/myfile.csv")
拡張機能も削除する場合:
tools::file_path_sans_ext(basename("full/path/to/myfile.csv"))
したがって、コードを使用して次のようなことを行うことができます。
filenames <- list.files(path = "C:/Users/JB/Desktop/RawFiles", full.names = TRUE)
my.df <- do.call(rbind,
lapply(filenames, function(x)
cbind(read.csv(x),
name = tools::file_path_sans_ext(basename(x)))))
しかし、plyr::ldply
またはなどのツールを使用したよりクリーンなソリューションがありdata.table
、適切な検索で他の回答に例が見つかります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加