2017-05-16 4 views
1

readxlパッケージのread_excel関数を使用して、私のアプリケーションがxlsxlsxファイルを読み込んでいます。col_typeをread_excel(readxl)の列名で割り当てる方法はありますか?R

xlsまたはxlsxファイルを読み取っている間、シーケンスと正確な列数はわかっていません。 15事前定義された列がある10列そのうち必須であり、任意ある5列の残り。したがって、ファイルは常に最小10の列との最大15の列になります。

必須の10個の列にcol-typesを指定する必要があります。私が考えることができる唯一の方法は、列名を使用してcol_typesを指定することです。ファイルには必須の10個の列がすべて含まれていますが、それらはランダムな順序です。

私はそうする方法を探してみましたが、そうすることはできませんでした。

カラム名でcol_typesを割り当てる方法は誰にでも分かりますか?

+1

短い答えはいいえです。 'reader :: cols'のようなものではありません。構造が非常に規則的であれば、あなたはそれを偽造することができるかもしれませんが、それはあなたのもののようには聞こえません。より単純なオプションは、すべてのものとサブセットを読み込むだけです。型が問題を引き起こしている場合は、すべてを文字として読み取り、 'readr :: type_convert'または' lapply' 'type.convert'を使用してクリーンアップしてください。 – alistaire

+0

うん。私はあなたが言及したオプションについて考えました。私はちょうどタイプ変換のポストファイルの読み込みのオーバーヘッドを避けたかった。しかし、あなたが他の選択肢がないと言ったように、私はそれと一緒に行く必要があるかもしれません。 –

+0

正直なところ、15種類の変数を使用すると、データが何百万行になるまで時間の型変換にかかる時間は無視できます。 – alistaire

答えて

0

以下の回避策で問題を解決します。しかし、この問題を解決する最良の方法ではありません。私はを2回エクセルファイルを読み取るファイルが非常に大量のデータを持っている場合は、パフォーマンスにヒットします。

まず読む:建物の列のデータ型ベクター - (、列名のように、列の数とそれがタイプだ)の列情報を取得するためのファイルを読み込むと、列ごとにdatatypeを持つことになりますcolumn_data_typesvectorを構築ファイル内にあります。

#reading .xlsx file 
site_data_columns <- read_excel(paste(File$datapath, ".xlsx", sep = "")) 

site_data_column_names <- colnames(site_data_columns) 

for(i in 1 : length(site_data_column_names)){ 

    #where date is a column name 
    if(site_data_column_names[i] == "date"){ 
     column_data_types[i] <- "date" 

     #where result is a column name 
     } else if (site_data_column_names[i] == "result") { 
         column_data_types[i] <- "numeric" 

     } else{ 
       column_data_types[i] <- "text" 
     } 
} 

第2の読み出し:は、Excelファイルを読み取るたContentファイルを読み込みカラムdata typesを有するvectorcolumn_data_typescol_typesパラメータを供給すること。

#reading .xlsx file 
site_data <- read_excel(paste(File$datapath, ".xlsx", sep = ""), col_types = column_data_types) 
関連する問題