使用microdatasus包下载SIH-RD数据遇错误,求技术协助
解决microdatasus包下载SIH-RD数据的两类问题
1. FTP文件无法访问的警告
In utils::download.file(file, temp, mode = "wb", method = "libcurl") :
cannot open URL 'ftp://ftp.datasus.gov.br/dissemin/publicos/SIHSUS/199201_200712/Dados/RDAC9402.dbc': FTP status was '550 Requested action not taken; file unavailable'
- 问题原因:目标文件
RDAC9402.dbc在DATASUS的FTP服务器上不存在,可能是文件路径调整、文件名拼写错误,或是该时段的SIH-RD数据未被归档保存。 - 解决步骤:
- 手动核实FTP目录:查看对应FTP路径下的文件列表,确认是否存在
RDAC9402.dbc; - 调整下载时段:如果指定的是1994年2月的数据,尝试更换其他有公开数据的时段测试;
- 更新包版本:升级
microdatasus到最新版本,包内的文件路径映射可能已随DATASUS服务器的变更更新。
- 手动核实FTP目录:查看对应FTP路径下的文件列表,确认是否存在
2. dplyr::bind_rows()类型不兼容错误
Error in
dplyr::bind_rows():
! Can't combine..1$NUM_PROCand ..2$NUM_PROC.
- 问题原因:下载的多份SIH-RD数据中,
NUM_PROC字段的类型不一致——部分文件中是字符型,部分是整数型,bind_rows无法自动合并不同类型的同名字段。 - 解决步骤:
- 统一字段类型后再合并:在合并前,将所有数据框的
NUM_PROC字段转换为同一类型(推荐转为字符型,避免流程编号包含非数字字符时丢失信息),示例代码:library(dplyr) # 假设raw_data_list是下载得到的多个数据框组成的列表 processed_list <- lapply(raw_data_list, function(df) { df %>% mutate(NUM_PROC = as.character(NUM_PROC)) }) combined_data <- bind_rows(processed_list) - 单独处理异常文件:如果只有个别文件的
NUM_PROC类型异常,可先定位该文件,单独调整类型后再加入合并队列; - 检查数据时段差异:早期SIH数据的字段定义可能存在变动,不同年份/月份的字段类型可能不同,必要时按时段分批处理后再合并。
- 统一字段类型后再合并:在合并前,将所有数据框的
内容的提问来源于stack exchange,提问作者Alex Gois
相关产品推荐
相关产品推荐

