1列包含标题和数据,如何使其成为多个

时间:2017-05-26 18:54:57

标签: r ms-word

我尝试使用不在表格中的数据的Word文档,并将其制作成表格。有数百个相同的单词文档,我想编写一个可以获取数据并将其放入表格的脚本。

我的第一个想法是将它全部转换为一列,然后我可以以某种方式拉出列标题并组织其下的数据。

Word文件:https://github.com/cstaulbee/Operation-WordDoc/blob/master/Sanitized_sampe.docx

library(docxtractr)


filenames <- list.files(".", pattern="*.docx", full.names=TRUE)
docx.files <- lapply(filenames, function(file) read_docx(file))

idx <- 1
docx.tables <- lapply(docx.files, function(file) {

  ifelse(dir.exists("Contents"), {
    unlink("Contents", recursive=T, force=T)
    dir.create("Contents")
  }, {
    dir.create("Contents")
  })

  filename <- filenames[idx]
  idx <- idx + 1

  tbl <- docx_extract_tbl(file, 1)
  file.copy(filename, "Contents\\word.zip", overwrite=T)
  unzip("Contents\\word.zip", exdir='Contents')
  x <- xml2::read_xml("Contents\\word\\document.xml")
  nodes <- xml2::xml_find_all(x, "w:body/w:p/w:r/w:t")
  data.date <- paste(xml2::xml_text(nodes, trim=T), collapse="::")
  word_df <- strsplit(gsub("[:]{1,}", ":", txt), ":")
  return(
    list(
      date=data.date
    )
  )
})

word_df <- strsplit(gsub("[:]{1,}", ":", docx.tables), ":")

将单词doc转换为zip文件,然后将其作为XML读取。它会提取表格中不存在的信息,然后将其全部放入可以操作的列表中。

我想知道是否有人知道采用此列的方法并根据数据将其分成几列。例如,Date,Time in,Pilot和Assistants在列中会出现3次左右,但我希望每个列都是它们自己的列,它们之间的数据和下一个列标题是生成的数据行。

所以基本上它看起来像这样:

df_col
Date
2/
2/16
Pilot
John, Mark
Assistants
Alfred, James

但我希望它看起来像这样

Date_col  Pilot_col    Assistants_col
2/22/16   John, Mark   Alfred, James

除非有人知道更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用officer废弃docx文档:

library(officer)
doc <- read_docx(path = "Sanitized_sampe.docx")
docx_summary(doc)

enter image description here

当content_type ==“paragraph”时,最后一步是 regexp text