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

リスト型のテキストを文字列に変換するの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!有報分析で苦労した話

単純に注記の文章などを分析すると、EDINETコードの他に注記のフィールドがデータ化され、その中には文字列と表や図が入ってくるので、データをリスト形式にしたほうが「一括」して扱いやすいというメリットがある。

しかし、これを分析しようとすると、テキスト部分と表の部分と図の部分とに「分割」したほうが扱いやすい。

表は<table>図は<img>で何とか拾うことが出来るので、そこを他のダミー文字列に置き換えた残りが、テキスト部分。

しかしこのテキストはリスト形式のままなので、文字列に変換しないと、あとあと扱いにくい。

とても苦労したので、それを残しておく。

!!!ソース
!!!実験

!!データ
!!テストデータ

 > Id = c('A001', "B002", "C003")
 > Txt = list(list("sing your way home", "at the close of the day"),   
            list("Oh, say, can you see", "by the dawns early light"),  
             list("ABCDEFG", "HIJKLMN", "OPQRSTU"))  
 > (df = tibble(Id, Txt))

 # A tibble: 3 x 2
  Id    Txt       
  <chr> <list>    
 1 A001  <list [2]>
 2 B002  <list [2]>
 3 C003  <list [3]>


!!変換の方法

!文単位のベクトルに変換
 > sapply(df$Txt, toString)
 [1] "sing your way home, at the close of the day"    "Oh, say, can you see, by the dawns early light"
 [3] "ABCDEFG, HIJKLMN, OPQRSTU"                     

!文単位のリストに変換
 > sapply(df$Txt, unlist)
 [[1]]
 [1] "sing your way home"      "at the close of the day"
 
 [[2]]
 [1] "Oh, say, can you see"     "by the dawns early light"
 
 [[3]]
 [1] "ABCDEFG" "HIJKLMN" "OPQRSTU"


!!列を変換する
!文章単位で変換
 > df %>% mutate(Txt = sapply(Txt, toString))
 > df %>% mutate(Txt = sapply(Txt, toString))
 # A tibble: 3 x 2
   Id    Txt                                           
   <chr> <chr>                                         
 1 A001  sing your way home, at the close of the day   
 2 B002  Oh, say, can you see, by the dawns early light
 3 C003  ABCDEFG, HIJKLMN, OPQRSTU                     

!分単位でリストに変換
 > df %>% mutate(Txt = sapply(Txt, unlist)) #str_cと同じ結果
 # A tibble: 3 x 2
   Id    Txt      
   <chr> <list>   
 1 A001  <chr [2]>
 2 B002  <chr [2]>
 3 C003  <chr [3]>

!!旨く行かない方法

!理由がわからない
 > df %>% sapply(Txt, toString)
 get(as.character(FUN), mode = "function", envir = envir) でエラー: 
   変数 'Txt' (モード 'function')は見つかりません 

 > df %>% sapply(Txt, unlist)
 get(as.character(FUN), mode = "function", envir = envir) でエラー: 
   変数 'Txt' (モード 'function')は見つかりません 

!おそらくTxt列の下部にあるlistが無名だから(その無名のリストにあるはずの名前を使って処理すべき)
 > df %>% map("Txt", toString)
 $Id
 NULL
 
 $Txt
 NULL

 > df %>% map("Txt", unlist)
 $Id
 NULL
 
 $Txt
 NULL

 > df %>% map("Txt", toString)
 $Id
 NULL
 
 $Txt
 NULL