auditR
有報分析で苦労した話
単純に注記の文章などを分析すると、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
Last updated 2019-09-16 | auditR (c) N.Nawata