R上でのデータフレームの内容確認とデータ入力は難しい
Rでデータフレームを処理する場合、データ入力とプレビューをExcel等で行い、その後のデータ処理をRで行うというのが一般的だと思います。
しかし、処理中にエラーが出たためにデータフレーム全体を眺めてザっと問題箇所を発見したい場合などには、いちいちExcelを起動するのはちょっと面倒です。よって、データをhead()
、tail()
を使ってコマンドライン上で見てみたり、View()
を使って簡単なビューアで見てみたりしたりしますが、これらの使い勝手はすごく良いとはいえません。
Rはあくまでもインポートしたデータを操作するためのソフト(あるいはプログラミング言語or環境)であるため、表計算ソフトでできるような表をスクロールしながらの内容の確認やデータの入力作業は基本的にできません。これはRStudioも同様です。
この点自分も少し気になっていたのですが、このたびDataEditR
というパッケージを見つけました。
このパッケージは「R上でデータフレームを表計算ソフトのように操作する」、「R上で表の微細な手直しを行う」などのわがままを可能にしてくれるパッケージです。

vignettesはこちら
大まかな使い方については以下のチュートリアルが分かりやすいです
日本語では以下の解説記事がありました。
ここでは主にvignettesとReferenceをもとにDataEditRがどんな風に使えるか見ていきたいと思います。
準備
DataEditR
はRStudio上で動作するのでRStudioが必要です。
パッケージはCRANからインストール可能です。
install.packages("DataEditR")
使用する際にはlibraryで呼び出します(後述しますがアドインから呼び出すことも可能です)。
※tidyverse
はここでの解説に使うために呼び出しているもので、DataEditR
を使うにあたって必須なわけではありません。
library(DataEditR)
library(tidyverse)
データを見る
DataEditR
のメインの関数はdata_edit
であり、これを用いてインタラクティブな表操作ウィンドウを呼び出します。
ここではtidyr
に入っているbillboard
データセットを見てみたいと思います。
まずはコンソール上に出力した場合
> 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
で見てみた場合(警告が出ていますがおおまかな表示の比較用なので今回はスルーしました)
> 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.
上のようなダイアログボックスがRStudio上にあらわれます。オプションのviewer
で"browser"
を指定するとデフォルトのウェブブラウザで、"viewer"
あるいは"pane"
を指定するとRStudioのペイン内にこのウィンドウが表示されます。
上記のウィンドウ内の表はほぼExcel(というかどちらかというとGoogle Spread Sheet)のように操作することができ、セルを選択してカーソル移動することなどで表全体を見たりすることができます。
ただし、ホイールでスクロールしたい場合にはスクロールバー上にカーソルを置いておかないといけなさそうです。ちなみに横スクロールバーは一番下にあります。
データのインポート
次に、ウィンドウ上で表示するデータの読み込み方を見ていきたいと思います。
オブジェクトから読み込む
任意のデータフレームオブジェクトからデータを読み込む場合には、上記のようにdata_edit
の引数に目的のオブジェクトを指定します。
データファイルから読み込む
任意のCSVファイル等から読み込む場合には、該当ファイル名を指定し、read_fun
オプションとread_args
オプションを適宜指定します。
オプションの指定は必要ないかもしれませんが、エンコードがShift-JISになっており日本語も含まれるデータを読み込む際などには下記のように指定した方がいいかもしれません。
> data_edit("てすとてんすう.csv", read_fun = "read.csv", read_args = list(fileEncoding = "cp932"))
Listening on http://127.0.0.1:6987
データの編集
data_edit
で開かれたウィンドウ上では、これもExcelなどと同様に任意のセルを選択し、編集することが可能です。もちろん列名も編集できます。またオートフィル機能もあるため、同じ数字を一気に入力することもできます。
また便利機能として、列の選択と行のフィルタリングを行うことも可能です。
列の選択(セレクト)はこんな感じ。
行の選択(フィルター)はこんな感じ(基準値は「Add ○○..」をクリックして追加する必要があります)。
そうするとこんな風になります。
ちなみに「セレクト」や「フィルター」ではdplyr::select
やdplyr::filter
を呼び出して使っているわけではないようです(cf. GitHub上のコード)。
編集した表の保存
セルの編集や列選択、行選択をした表はハサミマークの「crop to selection」を押して「Done」を押すことで編集を確定させることができます。
保存先はdata_edit
実行時の書式によって指定可能です。
オブジェクトに格納する場合
単にdata_edit
の出力結果を<-
でオブジェクトに格納することで、編集後データを記録可能です。
> 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_as
、write_fun
、write_args
を適宜指定することでファイルに出力可能です。
> 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
(以下略)
オブジェクトにもファイルにも保存する
オブジェクトにデータを格納し、データをファイルにも出力する場合には、上記の方法を組み合わせればOKです。格納先オブジェクトおよび出力先ファイルを指定します。
> 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
を使用すると、なんと空の表を作成し、データ入力を行うこともできます。
下図のようにセル選択後に右クリックをすることで行および列を挿入、追加することも可能です(もちろん既存のデータへの行、列の追加も可能)。
> new_data <- data_edit(c(2, 3))
Listening on http://127.0.0.1:6987
その他の機能
その他col_*
オプションを指定することで列のさまざまなコントロールが可能です。
col_readonly
:指定した列を編集できないように保護する
col_bind
:列として新規結合するデータの指定。あるいはリストで新規列名を指定して新規空列を作成
col_options
:col_bind
で作成した空列の入力時に、dropdown menus(セルの値をいくつかの選択肢から選択して入力可能)、 dates(カレンダーから日付を入力可能), checkboxes(TRUE/FALSEをチェックリスト形式で入力可能)、passwords(データ入力時に不可視化)等の機能を使うか否か
※詳しくは公式のvignettesを見ていただきたいのですが、これらの機能はとても便利です
> 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...
またcode
オプションというのもあるのですが、これは編集履歴を残しておくようなものではないようなのでその点には注意です。
アドインでの呼び出し
なんとRStudioにはこのData Editorのアドインがあります。スクリプト上のデータフレーム名を選択してアドインを呼び出すなどの方法で、ウィンドウ上にデータを表示させることができます。
データフレームの内容確認にとても便利!
このようにDataEditR
は非常に便利な表(データフレーム)操作環境を提供してくれます。
データを概観するという観点からはRStudio上のビューアも十分便利なのですが、やはり一歩踏み込んだ操作性の高さがGoodだと思います。
特に列数が多いデータフレーム(今回用いたbillboard
のようなもの)や行数が多いデータフレーム(ggplot2::diamonds
のようなもの)など、コマンドライン上でデータの大まかな様子の確認を行うのに無理があるデータを見るときに非常に便利だろうと思います。ただし、あまりに大きなデータだと動作が重くなりそうなので、適宜head
とかで行数を減らしてdata_edit
に渡すのがいいかもしれません(diamonds
をそのまま表示しようとすると止まりました)。
個人的にはデータの入力はExcelで済ませて、データの編集はコマンドで記録しておく派なので、編集機能はあまり使わないかもしれませんが、本当に便利なパッケージだと思います!(とくにアドオンがめっちゃ便利!)