【问题标题】:Scraping tables from Excel files into R将 Excel 文件中的表抓取到 R 中
【发布时间】:2020-12-04 20:02:45
【问题描述】:

我有几个 excel 文件 (*.xlsx),我想将它们导入 R,但每个文件在一张表中有 6 到 7 个表格,由文本块分隔,如图所示。

我知道如何使用循环导入多个 excel 文件,但我的问题是我无法弄清楚如何选择分布在每张工作表上的每个表格,避免带有文本的行并将它们绑定。此外,每个 excel 文件中的每个表格都从不同的单元格开始,因此我不能只定义一个坐标(特定单元格)来导入表格。每个excel文件的行数都不同。如有任何帮助,我将不胜感激。

例如,上图是关于马里兰州(美国的一个州),我想将其转换为下图所示:

对于任何能够帮助我的人来说,这是一个玩具文件:LINK 谢谢!

【问题讨论】:

  • 如何导入数据框,然后删除所有只有第一列内容的行?
  • 报废表格?只需删除它们,不像回收汽车:)
  • 除了@MarioNiepel 写的。然后,您可能希望将这张表分成几张表。只要有空行,就会发生拆分。
  • 另一种方法,但我不记得了,将每个表格格式化为 Excel 中的真实表格(Excel 中有一个特殊功能),然后使用 openxlsx 包将其导入。 IIRC,这个包提供从电子表格中捕获单个表格。但也许我错了……
  • Thaks @MarioNiepel,但是我如何识别需要删除的行,因为每行都以不同的字母/单词开头?此外,我不能只删除行并与下表绑定,因为并非总是有相同数量(和名称)的列,如图所示。 (有几个这样的文件,这就是为什么我需要自动化这个过程)

标签: r excel screen-scraping


【解决方案1】:

根据您显示的数据图像,似乎可以删除第二列具有 NA 的所有行?在这种情况下,base R 中的子集非常简单:

test <- test[!is.na(test[,2]),]

快速解释:

test[ ,2] --> 计算第 2 列中的所有行

is.na(test[ ,2]) --> 如果单元格为 NA,则返回 TRUE

!is.na(test[ ,2]) --> 如果单元格为 NA,则返回 FALSE

test[!is.na(test[,2]),] --> 列 2 中的单元格不为 NA 的所有测试数据帧行

同样,根据您展示的数据,这应该可行。但是如果没有真实的采样日期,很难计算出来。

【讨论】:

  • 谢谢。我认为采取行是一个聪明的主意。但是我仍然有绑定行的问题,因为列的顺序是不规则的。如图所示,即使大多数表的列数相同,但顺序和名称并不总是相同。
  • 不幸的是,我认为没有人可以根据一小部分数据的图像给你更具体的建议。请设置一个小玩具示例,说明您正在使用的数据、您尝试过的内容、当前的输出以及您想要的输出。
  • 你是对的马里奥。我添加了一个 xlsx 文件和一张我正在寻找的图片。再次感谢。
  • 我查看了文件,实际上我现在正在做一个类似的项目。我觉得除了一一解决问题,真的没什么可做的了。查看第一列以识别所有年份/州组合。之后,尝试识别属于该年份/州组合的数据块并提取。然后通过匹配列中的变量来组合所有提取的块。
  • 谢谢,无论如何。我会给它一个机会来表达你的想法。
猜你喜欢
  • 2018-04-27
  • 2021-06-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多