将 Factiva-HTML 转换为 tidy-dataframe 的函数
Posted
技术标签:
【中文标题】将 Factiva-HTML 转换为 tidy-dataframe 的函数【英文标题】:Function turning Factiva-HTML into a tidy-dataframe 【发布时间】:2020-10-31 08:44:58 【问题描述】:使用 tm.plugin.factiva-package 我想创建一个可以读取 Factiva-html 文件的函数,并将它们作为数据框返回。到目前为止,我已经设法创建了一个可以读取这些文件的函数,并将它们转换为数据帧列表,每个 df 对应一个 html 文件。但是,我很难找到一种将它们合并到一个 df 中的方法,因为 tidy()
函数将某些列作为列表而不是字符向量返回。使用bind_rows()
f.ex。返回错误Error: Column `company` can't be converted from list to character
。从理论上讲,所有存在问题的列都可以被选中,因为我并不真正需要它们,但是我无法找到对整个列表执行此操作的方法,例如select()
无法处理列表(而且我自己对使用它们还很陌生)。
现在的函数如下所示:
Factiva_Reader <- function(File_Path)
pac <- c("tidyverse", "tidytext", "tm", "tm.plugin.factiva")
sapply(pac, require, character.only = TRUE) #Loading required packages,
Filer <- list.files(File_Path)
Filer <- str_extract(Filer, "\\w*\\.html")
Filer <- Filer[!is.na(Filer)] #Creates a list of all valid files in folder
Data <- sapply(Filer, FactivaSource)
Data <- sapply(Data, Corpus, readerControl = list(language = NA))
Data <- lapply(Data, tidy)
我很不确定如何显示数据,因为它在技术上受版权保护,而且格式很奇怪,但至少应该显示结构。到目前为止,该函数为文件夹中的每个文件返回一个包含此格式的 df 的列表:
$ Factiva3.html: tibble [100 x 20] (S3: tbl_df/tbl/data.frame)
..$ author : chr [1:100] ...
..$ datetimestamp: POSIXct[1:100], format: ...
..$ description : logi [1:100] NULL ...
..$ heading : chr [1:100] ...
..$ id : chr [1:100] ...
..$ language : chr [1:100] ...
..$ origin : chr [1:100] ...
..$ edition : chr [1:100] ...
..$ section : chr [1:100] ...
..$ subject :List of 100
..$ coverage :List of 100
..$ company : chr [1:100] ...
..$ industry :List of 100
..$ infocode :List of 100
..$ infodesc :List of 100
..$ page : chr [1:100] ...
..$ wordcount : int [1:100] NULL ...
..$ publisher : chr [1:100] ...
..$ rights : chr [1:100] ...
..$ text : Named chr [1:100] ...
.. ..- attr(*, "names")= chr [1:100] ...
【问题讨论】:
【参考方案1】:对于那些感兴趣的人来说,迟来的回应。
以下使用purrr::map
的代码应返回所需的小标题。
files_list <- list.files(Files_Path)
is_html_file <- str_extract(files_list, "\\w*\\.html")
html_files <- is_html_file[!is.na(is_html_file)] #Creates a list of all valid files in folder
html_files_path <- str_c(Files_Path, html_files)
html_files_path %>%
map(FactivaSource) %>%
map(Corpus, readerControl = list(language = NA)) %>%
map_dfr(tidy)
【讨论】:
以上是关于将 Factiva-HTML 转换为 tidy-dataframe 的函数的主要内容,如果未能解决你的问题,请参考以下文章
将rowdatapacket转换为数组,如何将mysql node.js api rowdatapacket转换为数组,将字符串转换为数组