トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン 印刷

unnest()

auditR

リストのオブジェクトを分解する

tibble型のデータは項目の中にリストとして別のオブジェクトを持つことができる。

しかしデータがネスト(入れ子)構造になっていると最上位のデータだけ見えて下位は見えず、テーブル(二次元)になっていないと扱いづらい。r-wakalangで見つけた。

以下のようなデータがある。resという項目に区切り文字に変なデータがあり別々にしたい。

> data1
# A tibble: 9 x 2
    ID res      
 <dbl> <chr>    
1     1 2        
2     1 2        
3     1 3        
4     2 2</p><p>1
5     2 2</p><p>2
6     2 2</p><p>1
7     3 3        
8     3 3        
9     3 2        

そこで、まずは区切り文字を使ってデータを分けてしまう。すると、データがリスト化される(そして見えない)。

> data1 %>% mutate(res = str_split(res, "</p><p>"))
# A tibble: 9 x 2
    ID res      
 <dbl> <list>   
1     1 <chr [1]>
2     1 <chr [1]>
3     1 <chr [1]>
4     2 <chr [2]>
5     2 <chr [2]>
6     2 <chr [2]>
7     3 <chr [1]>
8     3 <chr [1]>
9     3 <chr [1]>

そこでunnest()を使うと、見える。

> data1 %>% mutate(res = str_split(res, "</p><p>")) %>% unnest()
# A tibble: 12 x 2
     ID res  
  <dbl> <chr>
1     1 2    
2     1 2    
3     1 3    
4     2 2    
5     2 1    
6     2 2    
7     2 2    
8     2 2    
9     2 1    
10     3 3    
11     3 3    
12     3 2    
警告メッセージ: 
`cols` is now required when using unnest().
Please use `cols = c(res)` 

unnestは分解する項目名を指定するのがデフォルトになったので、指定しないと上記のような警告が出るが、一項目しかない場合は出力は同じである。


Last updated 2020-07-06 | auditR (c) N.Nawata