如何清理R中的数据

发布于 2025-01-23 10:43:52 字数 1374 浏览 0 评论 0原文

在这里输入图像描述我正在通过自动化他的一项工作来帮助我的教授。他有一个Word文档,其中包含以表格形式的学生的信息,并且每个文档中都有许多表(有时在数百个文档中)。我在R中创建了以下功能以从Word提取数据

library(xml2)
get_tbls <- function(word_doc) {
  tmpd <- tempdir()
  tmpf <- tempfile(tmpdir=tmpd, fileext=".zip")
  
  file.copy(word_doc, tmpf)
  unzip(tmpf, exdir=sprintf("%s/docdata", tmpd))
  
  doc <- read_xml(sprintf("%s/docdata/word/document.xml", tmpd))
  
  unlink(tmpf)
  unlink(sprintf("%s/docdata", tmpd), recursive=TRUE)
  
  ns <- xml_ns(doc)
  
  tbls <- xml_find_all(doc, ".//w:tbl", ns=ns)
  
  lapply(tbls, function(tbl) {
    
    cells <- xml_find_all(tbl, "./w:tr/w:tc", ns=ns)
    rows <- xml_find_all(tbl, "./w:tr", ns=ns)
    dat <- data.frame(matrix(xml_text(cells), 
                             ncol=(length(cells)/length(rows)), 
                             byrow=TRUE), 
                      stringsAsFactors=FALSE)
    colnames(dat) <- dat[1,]
    dat <- dat[-1,]
    rownames(dat) <- NULL
    dat
    
  })
  
}

此函数从Word文档中提取数据,之后,我使用WriteXl软件包将数据导出到Excel,但它也显示了我不需要的内容。

enter image description hereI'm helping out my professor by automating one of his work. He has a word document that contains information of students in tabular form and there are many tables in each document (sometimes in the hundreds). I've created the function below in R to extract data from Word

library(xml2)
get_tbls <- function(word_doc) {
  tmpd <- tempdir()
  tmpf <- tempfile(tmpdir=tmpd, fileext=".zip")
  
  file.copy(word_doc, tmpf)
  unzip(tmpf, exdir=sprintf("%s/docdata", tmpd))
  
  doc <- read_xml(sprintf("%s/docdata/word/document.xml", tmpd))
  
  unlink(tmpf)
  unlink(sprintf("%s/docdata", tmpd), recursive=TRUE)
  
  ns <- xml_ns(doc)
  
  tbls <- xml_find_all(doc, ".//w:tbl", ns=ns)
  
  lapply(tbls, function(tbl) {
    
    cells <- xml_find_all(tbl, "./w:tr/w:tc", ns=ns)
    rows <- xml_find_all(tbl, "./w:tr", ns=ns)
    dat <- data.frame(matrix(xml_text(cells), 
                             ncol=(length(cells)/length(rows)), 
                             byrow=TRUE), 
                      stringsAsFactors=FALSE)
    colnames(dat) <- dat[1,]
    dat <- dat[-1,]
    rownames(dat) <- NULL
    dat
    
  })
  
}

this function extracts data from word document and after that, I've used writexl package to export the data to excel but it is also displaying stuff i don't need.

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放飞的风筝 2025-01-30 10:43:52

目前尚不清楚您需要什么,但我可能会使用DPLYR来清洁数据框架。

使用您的数据框架dat:

dat <- dat %>%
select(c(text, level))%>%
filter(text!="")%>%
filter(level!="")

dat <- dat %>%
select(-c(doc_index, content_type, is_header))

It's unclear what you need but I would probably use dplyr to clean the data frame.

Using your data frame dat:

dat <- dat %>%
select(c(text, level))%>%
filter(text!="")%>%
filter(level!="")

or

dat <- dat %>%
select(-c(doc_index, content_type, is_header))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文