r - 将损坏的 xls 文件加载到 r 中而无需手动更改文件类型
问题描述
我正在努力下载一个 excel 文件,然后将其加载到 R:
utils::download.file(
url = 'https://servicos.ibama.gov.br/ctf/publico/areasembargadas/downloadListaAreasEmbargadas.php',
destfile = 'C:/users/arthu/Desktop/fines.rar',
mode = "wb"
)
解压缩并尝试将其加载到 R 中后:
utils::unzip(
zipfile = './fines.rar',
exdir = './ibama_data'
)
dados <- readxl::read_xls(
"./ibama_data/rel_areas_embargadas_0-65000_2020-12-10_080019.xls"),
skip = 6,
col_type = c(rep("guess", 13), "date", "guess", "date")
)
我明白了libxls error: Unable to open file
。
如果我尝试将文件重命名为 .xlsx,如下所示,使用 读取它时会出现评估错误readxl::read_excel
,说unable to open file
file <- file.rename(
from = "./Desktop/ibama_data/rel_areas_embargadas_0-65000_2020-12-10_080019.xls",
to = "./Desktop/ibama_data/test.xlsx"
)
但是,如果我手动打开这样的文件,excel 会向我发出警告,指出文件的扩展名与其类型不匹配。将其保存为 .xlsx 后,我终于可以使用read_excel
鉴于我想编写一个带有从网络下载此类数据然后将其加载到 R 中的函数的包,我该如何解决这个问题?
编辑
解决方案
.xls
您尝试读取的文件不是 Excel 文档,而是 HTML 表格。
您可以使用XML
package 阅读它:
library(XML)
doc <- htmlParse('rel_areas_embargadas_0-65000_2021-01-13_080018.xls')
tableNode <- getNodeSet(doc, '//table')
data <- XML::readHTMLTable(tableNode[[1]])
#Store header
header <- data[1:5,]
#Store colnames
colnames <- data[6,]
#Remove header
data <- data[-1:-6,]
#Set colnames
colnames(data)<-colnames
head(data)
推荐阅读
- sql-server - 在子查询中使用 select * 会产生糟糕的性能吗?
- python - 初始化后 Django 失去与 MySQL 数据库的连接(Docker)
- mongodb - Docker 无法在内部将服务名称转换为 IP 地址
- flutter - 是否可以动态禁用flutter_swiper的滑动几秒钟?
- c++ - 模板中的第二个 lambda 函数导致编译错误(智能感知未检测到问题) - 错误 C2988
- c# - 流利的断言:字典应该是等效的,以排除字典值上的属性
- reactjs - 反应:给定一个“键”,将带有该键的元素(来自array.map)滚动到视图中
- python-3.x - DynamoDB 和 Python Docker 连接“无法连接”
- java - 有没有更有效的方法来为 Android Studio 中的 Button 元素提供随机值?
- ejabberd - 如何获取ejabberd MUC中的离线用户列表?