在r中读取多个* .rtf文件

时间:2018-04-24 12:49:18

标签: r import rtf

我有一个包含2,000多个rtf文件的文件夹。我想将它们导入r(最好是可以与tidytext包一起使用的数据框)。另外,我需要一个额外的列,添加文件名,以便我可以将每个rtf文档的内容链接到文件名(稍后,我还必须从文件名中提取信息并将其保存到我的数据集的单独列中) 。

我遇到Jens Leerssen的解决方案,我试图适应我的要求:

require(textreadr)

read_plus <- function(flnm) {
read_rtf(flnm) %>% 
    mutate(filename = flnm)
}

tbl_with_sources <-
    list.files(path= "./data", pattern = "*.rtf", 
           full.names = TRUE) %>% 
map_df(~read_plus(.))

但是,我收到以下错误消息:

  

UseMethod出错(&#34; mutate _&#34;):     没有适用的方法变异_&#39;应用于类&#34;字符&#34;

的对象

任何人都可以告诉我为什么会出现这个错误或者提出另一个解决我问题的方法吗?

1 个答案:

答案 0 :(得分:1)

我终于通过一些解决方法解决了这个问题。

1)我使用MacOSX终端中的textutil命令将* .rft文件转换为* .txt文件:

find . -name \*.rtf -print0 | xargs -0 textutil -convert txt

通过这样做,我也摆脱了格式化。

2)然后我使用了Jens Lerrssen的read_plus函数。不过,我现在使用read.delim代替read_rtf并包含两个选项(stringsAsFactorsquote)来消除警告和/或错误:

read_plus <- function(flnm) {
    read.delim(flnm, header = FALSE, stringsAsFactors = FALSE, quote = "") %>% 
            mutate(filename = flnm)
}

3)最后,我读入了所有* .txt文件,并在最后重命名了列V1

df <- list.files(path = "./data", pattern = "*.txt", 
               full.names = TRUE) %>% 
    map_df(~read_plus(.)) %>%
    rename(paragraph = V1)