如何在R中按指定名单提取数据并分别保存为对应命名的Excel文件
R按指定姓名列表筛选行并导出为独立Excel文件的解决方案
问题根因
- 不需要嵌套循环:两层循环会导致每筛选一个姓名的数据,就重复写入3个目标文件,
write.xlsx默认不允许覆盖已存在文件,因此第一轮写入3个matt数据的文件后,第二轮写入就会触发文件已存在报错,循环终止,最终3个文件内容全是第一个人的数据 - 拆分提取和保存逻辑时,
answer变量只会保留最后一次筛选的结果,单独运行保存逻辑无法对应每个姓名的筛选结果
正确实现代码
基础循环写法(易理解)
首先确保已安装openxlsx包,没有的话先运行install.packages("openxlsx")
# 加载依赖包 library(openxlsx) # 示例数据 x <- c("anna", "matt", "anna", "david", "anna", "jane") data <- data.frame("name" = x, "case ref" = letters[1:6]) namelist <- c("matt", "david", "anna") # 单循环完成筛选+导出 for (cur_name in namelist) { # 筛选当前姓名对应的所有行 filter_df <- data[data$name == cur_name, ] # 导出为对应姓名命名的Excel,开启覆盖避免已存在文件报错 write.xlsx(filter_df, file = paste0(cur_name, ".xlsx"), overwrite = TRUE) }
简洁apply族写法
library(openxlsx) # invisible用于屏蔽lapply的无意义返回值 invisible(lapply(namelist, function(cur_name) { write.xlsx(data[data$name == cur_name, ], paste0(cur_name, ".xlsx"), overwrite = TRUE) }))
运行后会在当前工作目录生成matt.xlsx、david.xlsx、anna.xlsx三个文件,每个文件内容对应姓名的匹配行。
内容的提问来源于stack exchange,提问作者Beni
相关产品推荐
相关产品推荐

