【R】 データ編集に超便利な {editData} を紹介する

# 概要

データフレームを効率よく処理するときの定番といえばーー？

せーの！

<br>
>『『`{dplyr}`！！！』』

<br>
正解！素晴らしい！10ポインツ！
<br>

ですが欠損値を埋めたり、一行だけ消したり・・・といった風に、何らかしらの理由で**データの中身を直接修正したい**ときもありますよね。
データを画一的に処理するときは`{dplyr}`は大変重宝しますが、個々のデータ修正自体には少々使いづらいです。

そこでRStudio上でのデータ編集に役立つ、あまり認知されていないものの超絶使いやすい`{editData}`というRStudio用の拡張機能（アドイン）を紹介します。

# 導入

CRAN版と開発版の2つがあります。お好きなほうをどうぞ。
個人的には開発版がおすすめです。
この記事では開発版を使っています。CRAN版と若干仕様が違うので注意してください。

```R
# CRAN版
install.packages("editData")

# 開発版
# {devtools}パッケージが必要です。
devtools::install_github("cardiomoon/editData")
```

導入完了後に、一旦RStudioを再起動してください。

# 操作

予め編集したいデータセットを用意しておいてください。

```R
df1 <- iris
```



## 1. エディタの起動

関数で呼び出す方法と、アドインから開く方法があります。
どちらでもOKです。

### 関数による呼び出し
```R
df2 <- editData::editData(df1)
```

**追記：プラグインの不具合なのか、コールバックが上手くいかないようなので、編集したデータフレームを代入する形で呼び出してください。同じデータフレームに代入するようにすると上書きになります。**

```R:上書きしたい場合
df1 <- editData::editData(df1)
```

### アドインからの起動

~~ここです。~~

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/2e92aa05-336d-8cdc-460a-ee8a48cf103c.png)

~~エディタが起動したら`Or Enter data name`欄に編集したいデータフレーム名を入力しましょう。~~

![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/648fee12-8723-80ea-da06-1305b71b9ea1.png)

**追記：コールバックエラーが発生しているので、先に紹介した方法（関数で起動）でないと変更が反映されないようです。そのため、CSV出力を想定している時以外はこの方法は使えないと思われます。**



## 3. データの検索 (AND検索）

編集したいデータを探すためには、`Search`欄を使った検索が便利です。
例えば、以下のような条件のデータを探しているとします。

- Sepal.Width = 3.2、
- Petal.Length = 1.4
- Species = setosa

その場合は、こんな感じで入力すれば絞り込めます。列名と紐づけたような検索やOR検索は恐らくできないですが、欲しいデータの中身が幾つか分かっていれば十分だと思います。

![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/9e7cdb2d-311e-008f-3381-d2a04db3ad96.png)

## 4. データの中身を編集

先ほど絞り込んだデータを編集しましょう。
今回は、Sepal.Lengthを『4.6 ⇒ 5.0』に変更してみましょう。
編集したい数値をダブルクリックして書き換えるだけです。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/f08edf2e-397f-8b8a-2007-c60d752b9c36.png)

再び同じ条件で検索して、データが変更されていることを確認しましょう。

![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/06cae1e0-2829-682f-9212-89eacdab70ff.png)

## 3. データの追加
`Add New`をクリックして、適当にデータを入力してみましょう。
Update⇒Closeでウィンドウを閉じると変更が適用されます。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/593b0d8d-c45a-174c-3d0a-5373879e2497.png)

データが最後尾に追加されたのが確認できます。

![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551476/9d54abeb-361c-89b8-09a5-5725f151a202.png)

なお任意の場所にデータを追加したい場合、追加したい場所の下の行を選択して`Insert Row`をクリックします。

## 5. 行の削除

要らない行を選択して`Delete Row`を押せば消えます。

## 6. 変更の適用

必要な編集が完了したら`Done`を押します。これでR上に変更が反映されます。

## 7. データの全削除

`Reset`を押すことでデータの中身をすべて削除できます。
列名は生き残っているので、一旦更地にしてからデータを手動で追加していく場合に使用できます。
普通はあまり使わないと思います。

## 8. データの復旧

### Restore
`Restore`を押すことで、**直前の操作（追加・削除）に限り**、戻すことができます。
2回以上前の操作は戻せないほか、行の増減を伴わない作業（データ自体の編集）も、この方法では戻せないようです。
これらの操作を戻したい場合は、次項の初期化で行うことができます。

### Cancel（初期化）
追加・削除・編集したデータを編集前に戻すには、左上の`Cancel`を押します。
Rにエディタ上の変更が反映されないので、`Restore`で戻せないものも初期化することで復旧可能です。



# FAQ

**Q. Addin欄にeditDataが表示されない**
A. RStudioを再起動すれば多分でてきます。

**Q. エディタは起動するけどデータが正常に表示されない**
A. オブジェクト名（データフレーム名）が3文字以上でないとダメなようです。名前を変えてみてください。

```R
# この場合はダメ
df <- iris
editData::editData(df)

# この場合はOK
df1 <- iris
editData::editData(df1)
```

**Q. 何ができないか？**
A. 例えば、以下のことができないと思います。必要であればR上で個別に操作してください。

- 列の追加
- 列名の編集
- 行・列の並び替え
- 縦持ち・横持ちの置換

**Q. 日本語に対応しているか？**
A. 対応しています。標準の`edit()`では日本語が文字化けすることがありますが、`editData`では問題なく扱えます。

**Q. N/Aを検索したい**
A. 検索欄ではN/Aを直接検索することはできなそうですが、カラムをクリックして昇順・降順いずれかでソートすると最後尾にN/Aのデータが集まりますので、このソート機能を活用するとよいでしょう。

# おわりに

多少使い勝手の悪い部分もありますが、データをRStudio上で直接編集できるのは超ありがたいです。

皆様のデータ分析に役立ちますように。

Enjoy!

おしまい。

# 参考文献
[package editData : An RStudio Addin for Editing A ‘data.frame’](https://cran.r-project.org/web/packages/editData/README.html)