Rのリストまたは別々のデータフレームにインポートする必要がある537個の.txtファイルがあります。重要なデータを追加する必要はありませんすべてを別々に保つRに複数の.txtファイルをインポートし、実際のデータ行にスキップ
各ファイルの名前が変更されているため、ファイル名はすべて統一されています。各ファイルには、雑多な情報がたくさんあるヘッダーセクションがあります。このヘッダーセクションは、ファイルに応じて12〜16行です。データについては、5〜7列あります。データはすべてタブで区切られています。列の数は5〜9列の間で異なりますが、列の順序は必ずしも同じではありません。そのため、列名はデータでインポートできます(列名はファイル間で統一されています)。次のようにファイルの形式は次のとおり
ヘッダ
ヘッダ
ヘッダ
ヘッダ... 16行
ヘッダと列の名前の間の空間の((数まで)¥
日付(\ t)データコール1(\ t)データコール2(\ t)データコール3(\ t)データコール
(列名とユニット間(NO空行))
MM/DD/YYYY(\ tの)HH:MM:SS(\ t)は単位(\ tの)単位(\ tの)単位(\ T )単位
((1ユニットとデータとの間の空行))
2016年1月31日(\ tの)14時32分02秒(\ tの)14.9(\ tの)25.3(\ tの)15.8私は必要なものをおさらいする(\ tの)25.6
(最大4000行の(データ反復))
:個々のDへのファイルのインポート すべてフレームまたはデータフレームのリストを含むことができる。 ヘッダー情報を「日付」の行にスキップします(単位と空の行が続く2つの行を削除する可能性があります)ので、列名とその後のデータが残ります。
ここでは、私がコードのために取り組んできたことの粗いコピーがあります。考え方は、すべてのファイルをRにインポートした後、各ファイルの1-2の列の最大値を決定することです。次に、各ファイルの2つの最大値を含む2つの列を持つ各ファイルに対して1つの行を持つ単一のファイルをエクスポートします。
##list files and create list for data.frames
path <- list.files("Path",pattern = NULL, all.files=FALSE,full.names=TRUE)
files <- list()
##Null list for final data to be extracted to
results <- NULL
##add names to results list (using file name - extension
results$name <- substr(basename(path),1,nchar(basename(Path))-4)
##loop to read in data files and calculate max
for(i in 1:length(path){
##read files
files[[i]] <- read.delim(path[[i]],header = FALSE, sep = "\t", skip = 18
##will have to add code:
##"if columnx exists do this; if columny exists do this"
##convert 2 columns for calculation to numeric
x.x <- as.numeric(as.character(files$columnx))
x.y <- as.numeric(as.character(files$columny))
##will have to add code:
##"if column x exists, do this....if not, "NA"
##get max value for 2 specific columns
results$max.x <- max(files$columnx)
results$max.y <- max(files$columny)
}
##add results to data frame
max <- data.frame(results)
##export to .csv
write.csv(max,file="PATH")
私が今知っている、私のコードだけで(最大はずっと後のファイルにまで来ていないので、1つのまたは2行をスキップすると、私を傷つけることはありません)データに過去のすべてをスキップし、そしてそれは想定してい列は各ファイル内で同じ順序です。これは恐ろしい練習で、私のデータポイントの約5%でいくつかの悪い結果が出ますが、これを正しく実行したいのです。私の主な関心事は、使用可能な形式でRにデータを取得することです。次に、他の計算やコンバージョンを追加できます。私はRには新しく、検索の2日後に、私はすでにフォーラムに投稿しておく必要があるヘルプが見つかりませんでした。ヘッダの構造はライン\に続くN行\ n個のデータは、我々は行番号を見つけるためにgrep
を使用することができると仮定すると
上記のアプローチがかなり進んでいるようです。ヘッダー情報の問題を解決するために、ここでは私のアプローチがあります(詳細はありません)。ヘッダー<-readLines(path [[i]]、n = 20)で最初の20行を読み込みます。 grep( "^ Date"、ヘッダー)を使用して、Dateで始まる行を探します。次に、 "strsplit"を使用して列見出しの配列を作成します。 grepコマンドの結果から、データの開始行を計算し、それを上のread.delim行に渡すことができます。幸運 – Dave2e
ありがとう、Dave2e。 @TJGorrieはあなたのコードにあなたの応答を追加しました。だからあなたの2人の間で、私は私よりもはるかに近いです! – JRW485
進歩があると聞いてうれしいです。問題が発生した場合は、更新されたコードとサンプルデータを追加して新しい質問を投稿してください。このフォーラムでは、出発点と希望するエンドポイントのサンプルを見るのが好きです。 – Dave2e