2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データフレームの内容確認&編集がウィンドウ上で簡単に⁉(DataEditR)

Last updated at Posted at 2021-11-30

R上でのデータフレームの内容確認とデータ入力は難しい

Rでデータフレームを処理する場合、データ入力とプレビューをExcel等で行い、その後のデータ処理をRで行うというのが一般的だと思います。

しかし、処理中にエラーが出たためにデータフレーム全体を眺めてザっと問題箇所を発見したい場合などには、いちいちExcelを起動するのはちょっと面倒です。よって、データをhead()tail()を使ってコマンドライン上で見てみたり、View()を使って簡単なビューアで見てみたりしたりしますが、これらの使い勝手はすごく良いとはいえません。

Rはあくまでもインポートしたデータを操作するためのソフト(あるいはプログラミング言語or環境)であるため、表計算ソフトでできるような表をスクロールしながらの内容の確認やデータの入力作業は基本的にできません。これはRStudioも同様です。

この点自分も少し気になっていたのですが、このたびDataEditRというパッケージを見つけました。
このパッケージは「R上でデータフレームを表計算ソフトのように操作する」、「R上で表の微細な手直しを行う」などのわがままを可能にしてくれるパッケージです。

logo.png > from https://github.com/DillonHammill/DataEditR

vignettesはこちら

大まかな使い方については以下のチュートリアルが分かりやすいです

日本語では以下の解説記事がありました。

ここでは主にvignettesReferenceをもとにDataEditRがどんな風に使えるか見ていきたいと思います。

準備

DataEditRはRStudio上で動作するのでRStudioが必要です。
パッケージはCRANからインストール可能です。

.r
install.packages("DataEditR")

使用する際にはlibraryで呼び出します(後述しますがアドインから呼び出すことも可能です)。
tidyverseはここでの解説に使うために呼び出しているもので、DataEditRを使うにあたって必須なわけではありません。

.r
library(DataEditR)
library(tidyverse)

データを見る

DataEditRのメインの関数はdata_editであり、これを用いてインタラクティブな表操作ウィンドウを呼び出します。
ここではtidyrに入っているbillboardデータセットを見てみたいと思います。

まずはコンソール上に出力した場合

.r
> billboard
# A tibble: 317 x 79
   artist track date.entered   wk1   wk2   wk3   wk4   wk5   wk6   wk7   wk8   wk9  wk10  wk11
   <chr>  <chr> <date>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 2 Pac  Baby~ 2000-02-26      87    82    72    77    87    94    99    NA    NA    NA    NA
 2 2Ge+h~ The ~ 2000-09-02      91    87    92    NA    NA    NA    NA    NA    NA    NA    NA
 3 3 Doo~ Kryp~ 2000-04-08      81    70    68    67    66    57    54    53    51    51    51
 4 3 Doo~ Loser 2000-10-21      76    76    72    69    67    65    55    59    62    61    61
 5 504 B~ Wobb~ 2000-04-15      57    34    25    17    17    31    36    49    53    57    64
 6 98^0   Give~ 2000-08-19      51    39    34    26    26    19     2     2     3     6     7
 7 A*Tee~ Danc~ 2000-07-08      97    97    96    95   100    NA    NA    NA    NA    NA    NA
 8 Aaliy~ I Do~ 2000-01-29      84    62    51    41    38    35    35    38    38    36    37
 9 Aaliy~ Try ~ 2000-03-18      59    53    38    28    21    18    16    14    12    10     9
10 Adams~ Open~ 2000-08-26      76    76    74    69    68    67    61    58    57    59    66
# ... with 307 more rows, and 65 more variables: wk12 <dbl>, wk13 <dbl>, wk14 <dbl>, wk15 <dbl>,
#   wk16 <dbl>, wk17 <dbl>, wk18 <dbl>, wk19 <dbl>, wk20 <dbl>, wk21 <dbl>, wk22 <dbl>,
#   wk23 <dbl>, wk24 <dbl>, wk25 <dbl>, wk26 <dbl>, wk27 <dbl>, wk28 <dbl>, wk29 <dbl>,
#   wk30 <dbl>, wk31 <dbl>, wk32 <dbl>, wk33 <dbl>, wk34 <dbl>, wk35 <dbl>, wk36 <dbl>,
#   wk37 <dbl>, wk38 <dbl>, wk39 <dbl>, wk40 <dbl>, wk41 <dbl>, wk42 <dbl>, wk43 <dbl>,
#   wk44 <dbl>, wk45 <dbl>, wk46 <dbl>, wk47 <dbl>, wk48 <dbl>, wk49 <dbl>, wk50 <dbl>,
#   wk51 <dbl>, wk52 <dbl>, wk53 <dbl>, wk54 <dbl>, wk55 <dbl>, wk56 <dbl>, wk57 <dbl>,
#   wk58 <dbl>, wk59 <dbl>, wk60 <dbl>, wk61 <dbl>, wk62 <dbl>, wk63 <dbl>, wk64 <dbl>,
#   wk65 <dbl>, wk66 <lgl>, wk67 <lgl>, wk68 <lgl>, wk69 <lgl>, wk70 <lgl>, wk71 <lgl>,
#   wk72 <lgl>, wk73 <lgl>, wk74 <lgl>, wk75 <lgl>, wk76 <lgl>

Tibble形式なので行はかなり見やすくなっていますが、すべての列はプレビューできません。また、すべての列の概観もできません。
続いてdata_editで見てみた場合(警告が出ていますがおおまかな表示の比較用なので今回はスルーしました)

.r
> billboard %>% data_edit()

Listening on http://127.0.0.1:6987
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.

data_edit_normal.png

上のようなダイアログボックスがRStudio上にあらわれます。オプションのviewer"browser"を指定するとデフォルトのウェブブラウザで、"viewer"あるいは"pane"を指定するとRStudioのペイン内にこのウィンドウが表示されます。
上記のウィンドウ内の表はほぼExcel(というかどちらかというとGoogle Spread Sheet)のように操作することができ、セルを選択してカーソル移動することなどで表全体を見たりすることができます。
ただし、ホイールでスクロールしたい場合にはスクロールバー上にカーソルを置いておかないといけなさそうです。ちなみに横スクロールバーは一番下にあります。

データのインポート

次に、ウィンドウ上で表示するデータの読み込み方を見ていきたいと思います。

オブジェクトから読み込む

任意のデータフレームオブジェクトからデータを読み込む場合には、上記のようにdata_editの引数に目的のオブジェクトを指定します。

データファイルから読み込む

任意のCSVファイル等から読み込む場合には、該当ファイル名を指定し、read_funオプションとread_argsオプションを適宜指定します。
オプションの指定は必要ないかもしれませんが、エンコードがShift-JISになっており日本語も含まれるデータを読み込む際などには下記のように指定した方がいいかもしれません。

.r
> data_edit("てすとてんすう.csv", read_fun = "read.csv", read_args = list(fileEncoding = "cp932"))

Listening on http://127.0.0.1:6987

data_edit_nihonngo.png

データの編集

data_editで開かれたウィンドウ上では、これもExcelなどと同様に任意のセルを選択し、編集することが可能です。もちろん列名も編集できます。またオートフィル機能もあるため、同じ数字を一気に入力することもできます。

また便利機能として、列の選択と行のフィルタリングを行うことも可能です。
列の選択(セレクト)はこんな感じ。
data_edit_select.png
行の選択(フィルター)はこんな感じ(基準値は「Add ○○..」をクリックして追加する必要があります)。
data_edit_filter.png
そうするとこんな風になります。
data_edit_selectfilter.png

ちなみに「セレクト」や「フィルター」ではdplyr::selectdplyr::filterを呼び出して使っているわけではないようです(cf. GitHub上のコード)。

編集した表の保存

セルの編集や列選択、行選択をした表はハサミマークの「crop to selection」を押して「Done」を押すことで編集を確定させることができます。
保存先はdata_edit実行時の書式によって指定可能です。

オブジェクトに格納する場合

単にdata_editの出力結果を<-でオブジェクトに格納することで、編集後データを記録可能です。

.r
> billboard %>% data_edit() -> billboard2

Listening on http://127.0.0.1:6987
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
later: interrupt occurred while executing callback.

later: interrupt occurred while executing callback.
# 上記例の列選択と行選択を実行

> billboard2 %>% head()
        artist                   track date.entered wk1
1        2 Pac Baby Don't Cry (Keep...   2000-02-26  87
2      2Ge+her The Hardest Part Of ...   2000-09-02  91
3 3 Doors Down              Kryptonite   2000-04-08  81
4 3 Doors Down                   Loser   2000-10-21  76
5     504 Boyz           Wobble Wobble   2000-04-15  57
6         98^0 Give Me Just One Nig...   2000-08-19  51

ファイルに出力する場合

オプションのsave_aswrite_funwrite_argsを適宜指定することでファイルに出力可能です。

.r
> billboard %>% data_edit(save_as = "billboard2.csv", write_fun = "write.csv", write_args = list(fileEncoding = "cp932"))

Listening on http://127.0.0.1:6987
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
                      artist                   track date.entered wk1
1                      2 Pac Baby Don't Cry (Keep...   2000-02-26  87
2                    2Ge+her The Hardest Part Of ...   2000-09-02  91
3               3 Doors Down              Kryptonite   2000-04-08  81
4               3 Doors Down                   Loser   2000-10-21  76
5                   504 Boyz           Wobble Wobble   2000-04-15  57
(以下略)

billboard2csv.png

オブジェクトにもファイルにも保存する

オブジェクトにデータを格納し、データをファイルにも出力する場合には、上記の方法を組み合わせればOKです。格納先オブジェクトおよび出力先ファイルを指定します。

.r
> billboard %>% data_edit(save_as = "billboard2.csv", write_fun = "write.csv", write_args = list(fileEncoding = "cp932")) -> billboard2

Listening on http://127.0.0.1:6987
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
 警告:  Setting row names on a tibble is deprecated.
later: interrupt occurred while executing callback.

later: interrupt occurred while executing callback.
> billboard2 %>% head()
        artist                   track date.entered wk1
1        2 Pac Baby Don't Cry (Keep...   2000-02-26  87
2      2Ge+her The Hardest Part Of ...   2000-09-02  91
3 3 Doors Down              Kryptonite   2000-04-08  81
4 3 Doors Down                   Loser   2000-10-21  76
5     504 Boyz           Wobble Wobble   2000-04-15  57
6         98^0 Give Me Just One Nig...   2000-08-19  51

また、ウィンドウ上の「save selection to file」や「save to file」を使用することでもファイルへの出力が可能です。

新規の表の作成

data_editを使用すると、なんと空の表を作成し、データ入力を行うこともできます。
下図のようにセル選択後に右クリックをすることで行および列を挿入、追加することも可能です(もちろん既存のデータへの行、列の追加も可能)。

.r
> new_data <- data_edit(c(2, 3))

Listening on http://127.0.0.1:6987

data_edit_blanc2.png

その他の機能

その他col_*オプションを指定することで列のさまざまなコントロールが可能です。
col_readonly:指定した列を編集できないように保護する
col_bind:列として新規結合するデータの指定。あるいはリストで新規列名を指定して新規空列を作成
col_optionscol_bindで作成した空列の入力時に、dropdown menus(セルの値をいくつかの選択肢から選択して入力可能)、 dates(カレンダーから日付を入力可能), checkboxes(TRUE/FALSEをチェックリスト形式で入力可能)、passwords(データ入力時に不可視化)等の機能を使うか否か
※詳しくは公式のvignettesを見ていただきたいのですが、これらの機能はとても便利です

.r
> test_data <- data.frame(id = 1:10, sp = rep(c("A", "B"), 5), site = rep(c("x1", "x2", "x3", "x4", "x5"), 2))
> test_data <- data_edit(test_data, col_bind = c("date", "picture"), col_options = list(date = "date", picture = c(TRUE, FALSE)))

Listening on http://127.0.0.1:6987
Column editing is turned off to add complex column types...

data_edit_coloptions.png
などなど

またcodeオプションというのもあるのですが、これは編集履歴を残しておくようなものではないようなのでその点には注意です。

アドインでの呼び出し

なんとRStudioにはこのData Editorのアドインがあります。スクリプト上のデータフレーム名を選択してアドインを呼び出すなどの方法で、ウィンドウ上にデータを表示させることができます。
data_edit_adin1.png
data_edit_adin2.png

データフレームの内容確認にとても便利!

このようにDataEditRは非常に便利な表(データフレーム)操作環境を提供してくれます。
データを概観するという観点からはRStudio上のビューアも十分便利なのですが、やはり一歩踏み込んだ操作性の高さがGoodだと思います。

特に列数が多いデータフレーム(今回用いたbillboardのようなもの)や行数が多いデータフレーム(ggplot2::diamondsのようなもの)など、コマンドライン上でデータの大まかな様子の確認を行うのに無理があるデータを見るときに非常に便利だろうと思います。ただし、あまりに大きなデータだと動作が重くなりそうなので、適宜headとかで行数を減らしてdata_editに渡すのがいいかもしれません(diamondsをそのまま表示しようとすると止まりました)。

個人的にはデータの入力はExcelで済ませて、データの編集はコマンドで記録しておく派なので、編集機能はあまり使わないかもしれませんが、本当に便利なパッケージだと思います!(とくにアドオンがめっちゃ便利!)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?