【LibreOffce AdventCalendar】データ前処理で躓いた時の話【21日目】

この記事はLibreOffice Advent Calendar 21日目の記事となります。

先日のR Advent Calendarに向けて作ったデータセットをそのままRに向けて使ってみたら、一部データがfactor(因子型)で入力されていました。普通に数値として読み込んでくれたら、int型になるはずなのですが…

f:id:rakugou:20181218214747p:plain
str関数でデータセットの要約を表示したもの。r_library、r_market、r_militiaの変数が因子型になっていることが分かる。

今回はデータを入力する便宜上、odsファイル→csvファイルに変換して作っていましたので、おそらく全角入力したかスペースが混入してしまって、そのまま保存してしまっていたのではないかなあと思います。

個人的には今回のR Advent Calendarではtidyrで前処理をやってみましたが、まだまだRでの前処理が未熟なので、実用段階ではLibreOffice Calcでの前処理がメインになっています。

CSVをざーっと眺めてみると規則的に並んでいないセルが見つかりました。35行目の一部のセルが他のセルと同じように並んでいないことが分かると思います。

f:id:rakugou:20181218220413p:plain

該当するセルを、右クリックメニューからの[セルの書式設定]で表示すると、テキスト形式になっていました。そりゃあ数字として扱ってくれないわけだ。

f:id:rakugou:20181218220823p:plain

しかし、そのままだと数値として認識してくれないため、文字列から数値に変更します。先程のセルの書式設定メニューからで「テキスト」になっている部分を「数」に変更して、[OK]をクリックします。 こうすると数値として書式設定できますが、このままRでCSVを読み込ませても同じ結果になってしまいます。 セルを編集すると、頭にコンマがついていたようなので、それを取り除きます。全て取り除いてから、RにCSVを読み込ませると数値として認識してくれるようになりました。

f:id:rakugou:20181218221946p:plain
青マルで囲まれたセルを編集状態にしている

Rおじさんであれば、そのへんうまくやってそうな気がしますが、まだまだOfficeアプリケーションの依存度が高いので、新しい変数生成はCalcの関数を使うのがメインになっています。