トップ 一覧 検索 ヘルプ RSS ログイン 印刷

unnest()の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
! リストのオブジェクトを分解する

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)` 
 `cols` is now required when using unnest().
 Please use `cols = c(res)` 

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