1

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()

ありがとうございました。

4

0 に答える 0