【发布时间】:2021-12-31 15:45:21
【问题描述】:
我有一个文档(.docx),在下面的链接中找到,我使用官员包提取了内容。 https://1drv.ms/w/s!AmwfO49TqaeQhMVx-_pXn-9-3onRRw?e=oe782f
这是文档外观的照片,其中标题 1、2、3 以不同颜色显示。
使用下面的代码,我已经提取了这个文档的内容。
doc <- read_docx("test.docx")
content <- docx_summary(doc)
head(content)
#To get all paragraphs:
par_data <- subset(content, content_type %in% "paragraph")
par_data <- par_data[, c("doc_index", "style_name",
"text") ]
par_data$text <- with(par_data, {
substr(
text, start = 1,
stop = ifelse(nchar(text)<30, nchar(text), 30) )
})
par_data
可以使用以下代码复制数据帧。
par_data <- data.frame(doc_index = 1:21,
style_name = c("heading 1", "heading 2", "heading 3",NA ,NA,NA, "heading 2", "heading 3", NA,NA,NA, NA,"heading 2", "heading 3", NA, NA, "heading 1", "heading 2","heading 3", NA,NA ),
text = c(' Cardiovascular drugs ', ' ACE inhibitors. ', ' Valsartan ', ' Valsartan is used to treat hig ', ' Side effects ', ' high potassium; headache, dizz ', ' Beta blockers. ', ' propranolol ', ' Propranolol is prescribed for ', ' Side effects ', ' slow or uneven heartbeats', ' wheezing or trouble breathing ', ' Calcium channel blockers. ', ' Nifedipine ', ' Side effects ', ' Bloating or swelling of the fa ', ' Neurological drugs ', ' Anticonvulsants ', ' Phenytoin ', ' Side effects ', ' Decreased coordination, mental '))
我需要将这个数据框重新塑造成这样:
事实上,我需要标题 1 和 2 作为列,其中每种药物(都是标题 3)获取这些列中最后一个标题的文本。另外,我还需要另外两列。有些药物有描述,然后是副作用,而另一些药物只有副作用,在下一个标题 1 或 2 或 3 出现之前的行中。有没有一种简单的方法可以做到这一点?任何帮助表示赞赏。
【问题讨论】:
-
不要让我们下载一个文件(无论如何它已经被删除了),让我们忘记其中的officer 组件,而只是致力于重塑数据。请将
dput(par_data)的输出发布到代码块中。 -
仅供参考,您可以将最后一个表达式缩短为
par_data$text <- substr(par_data$text, 1, 30);它不会延长较短的字符串,因此它们不受影响。 -
@r2evans 感谢您的帮助。我编辑了问题并提供了数据框的代码。