【问题标题】:Read multiple *.rtf files in r在 r 中读取多个 *.rtf 文件
【发布时间】:2018-10-04 17:47:46
【问题描述】:

我有一个包含 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("mutate_") 中的错误: 没有适用于“字符”类对象的“mutate_”方法

谁能告诉我为什么会出现这个错误或为我的问题提出另一种解决方案?

【问题讨论】:

  • read_rtf 的帮助页面说返回的值是一个字符向量,而不是mutate 行所期望的data.frame
  • 那么如何告诉 read_rtf 将字符转换为 data.frame?
  • 我不确定您的文档是否都一样长,或者您希望它们使用哪种data.frame
  • 文档的长度是否不同真的很重要吗(它们是!)。我想要一个包含两列(文件名、文本)和每个观察一行(=文档)的 data.frame。
  • 这项工作是否换成了 mutate 行? data.frame(filename = flnm, doc = .)

标签: r import rtf


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多