!!!有報分析で苦労した話
単純に注記の文章などを分析すると、EDINETコードの他に注記のフィールドがデータ化され、その中には文字列と表や図が入ってくるので、データをリスト形式にしたほうが「一括」して扱いやすいというメリットがある。
しかし、これを分析しようとすると、テキスト部分と表の部分と図の部分とに「分割」したほうが扱いやすい。
表は
図はで何とか拾うことが出来るので、そこを他のダミー文字列に置き換えた残りが、テキスト部分。
しかしこのテキストはリスト形式のままなので、文字列に変換しないと、あとあと扱いにくい。
とても苦労したので、それを残しておく。
!!!実験
!!テストデータ
> 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
1 A001
2 B002
3 C003
!!変換の方法
!文単位のベクトルに変換
> 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
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
1 A001
2 B002
3 C003
!!旨く行かない方法
!理由がわからない
> 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