R で動作するように、.txt (タブ区切り) から data.frame または data.table 形式に読み取る長年のデータがあります。毎年、四半期ごとのファイルを追加する必要があります。検索の結果、四半期ごとのファイルをすべて見つけて、FREAD と BIND_ROWS を使用して 1 つの年次ファイルを作成するための優れたコードが得られました。@まいあうら
私が見つけた 1 つの奇妙な点 - READ.TABLE の代わりに FREAD を使用すると、一部のベクトルに対して異なるクラスが発生します。pat_age は英数字の「00」、「01」、「02」です。READ.TABLE はこれを期待どおりに処理しているようです - FREAD は整数を作成します。したがって、PAT_AGE クラスを制御するために colClasses を追加しました。
残念ながら、四半期ごとのファイルの列名は大文字の場合もあれば、小文字の場合もあります (PAT_AGE pat_age)。.txt ファイルを読み込んだときにそれを制御する方法はありますか? tolower を使用した ColClasses は機能しませんでした。
tabtest <- list.files( pattern= ".*PUDF.*base.*tab.*" , full.names = TRUE)
%>% lapply( fread, header=TRUE, colClasses=c(pat_age="character")) %>%
dplyr::bind_rows()
乱雑なデータが予想されます-年ごとに移動するにつれて、他の列名とクラスを調整する必要があるかもしれません.
注:lapplyステートメント内で大文字と小文字を変更できない場合、.txtファイルに対して変更する必要があるというのは正しいですか?colClasses 関数では、すべてのファイルで「pat_age」を小文字にする必要があります。
注: この質問に出くわしました:
fread (data.table) select columns, throw error if column not found
ヘッダーを読み取って変更し、ヘッダーが修正された .txt ファイル全体を読み取るように変更できますか?
最新の試行 - うまくいくと思います。列名の大文字と小文字を変更するためだけに多くの労力/構文が必要です!
read_cols <- function(x) {
titles <- fread(x , nrows = 0, header = TRUE, stringsAsFactors = FALSE )
var.names<-tolower(colnames(titles))
rest <- fread(x , skip =1 )
names(rest) <- var.names
return(rest)
}
tabtest2 <- list.files( pattern=".*PUDF.*base.*tab.*", full.names = TRUE)
%>% lapply( read_cols )
%>% dplyr::bind_rows()
ありがとうございました。