求助:如何用R语言批量自动清洗登革热病例数据集
批量清洗登革热数据集的R实现
方法1:使用基础包lapply
无需额外安装新包,快速实现批量处理:
# 加载所需包 library(tidyr) # 1. 自动生成所有CSV文件名 file_names <- sprintf("DENGBR%02d.csv", 0:23) # 生成DENGBR00到DENGBR23的文件名 # 2. 定义单个数据集的清洗函数 clean_dengue_data <- function(file_path) { # 读取文件 df <- read.csv(file_path) # 保留指定列(第1、3、8列) df <- subset(df, select = c(1, 3, 8)) # 筛选目标城市的观测值 df <- df[df$ID_MUNICIP %in% c(3550308), ] # 重命名列 df <- df %>% rename(mn = ID_MUNICIP, dt = DT_NOTIFIC, uf = SG_UF_NOT) return(df) } # 3. 批量处理所有文件 cleaned_data_list <- lapply(file_names, clean_dengue_data) # 可选:将所有清洗后的数据集合并为一个大的数据框 combined_dengue_data <- do.call(rbind, cleaned_data_list)
方法2:使用purrr包(tidyverse风格)
如果习惯tidyverse语法,用purrr的链式调用更直观:
# 加载所需包 library(tidyr) library(purrr) library(dplyr) # 1. 生成文件名列表 file_names <- sprintf("DENGBR%02d.csv", 0:23) # 2. 批量处理并合并为单个数据框 combined_dengue_data <- file_names %>% map(read.csv) %>% # 批量读取所有文件 map(~ subset(., select = c(1, 3, 8))) %>% # 保留指定列 map(~ filter(., ID_MUNICIP %in% c(3550308))) %>% # 筛选目标城市 map(~ rename(., mn = ID_MUNICIP, dt = DT_NOTIFIC, uf = SG_UF_NOT)) %>% # 重命名列 bind_rows() # 合并所有结果
关键说明
sprintf("DENGBR%02d.csv", 0:23):自动生成带两位数字的文件名,避免手动重复输入- 封装清洗函数:把单个文件的操作打包成函数,逻辑清晰且便于后续调整清洗规则
- 结果存储:
cleaned_data_list以列表形式保存每个单独清洗后的数据集,combined_dengue_data是合并后的总数据集,可根据研究需求选择使用
内容的提问来源于stack exchange,提问作者André Ferrari
相关产品推荐
相关产品推荐

