如何从两个维度不同的data frame中提取指定行并生成多个.csv文件
R 匹配提取数据并分机构输出独立CSV文件方案
前提说明
假设你已将题目中给出的两个数据框分别加载为df1(对应data frame one)和df2(对应data frame two),以下提供两种实现方式,可按需选择。
方式一:tidyverse 实现(代码简洁易维护)
如果尚未安装依赖包,先执行安装:
install.packages("tidyverse")
加载包后执行匹配输出逻辑:
library(tidyverse) # 遍历所有待匹配的机构名称 walk(df2$distinctOrganizations, function(current_org) { # 模糊匹配逻辑:只要df1的name字段包含当前机构名就算匹配,忽略大小写 # 若需要精确匹配,把下行filter条件替换为 `name == current_org` 即可 match_result <- df1 %>% filter(str_detect(name, fixed(current_org, ignore_case = TRUE))) # 仅匹配到至少1条数据时才生成CSV文件,避免生成空文件 if (nrow(match_result) > 0) { # 替换机构名中的非法文件名字符,避免保存失败 safe_file_name <- str_replace_all(current_org, "[/:*?\"<>|]", "_") write_csv(match_result, paste0(safe_file_name, ".csv")) } })
方式二:基础R实现(无需安装额外依赖)
# 提取所有待匹配的机构名列表 org_list <- df2$distinctOrganizations for (org_name in org_list) { # 模糊匹配,忽略大小写,需要精确匹配的话把条件改为 `df1$name == org_name` match_rows <- grepl(org_name, df1$name, ignore.case = TRUE) match_df <- df1[match_rows, ] if (nrow(match_df) > 0) { # 处理文件名非法字符 safe_name <- gsub("[/:*?\"<>|]", "_", org_name) write.csv(match_df, paste0(safe_name, ".csv"), row.names = FALSE) } }
效果说明
代码运行后,所有匹配到对应数据的机构都会在你当前的R工作目录下生成独立的CSV文件,未匹配到数据的机构不会生成空文件。
内容的提问来源于stack exchange,提问作者classy_BLINK
相关产品推荐
相关产品推荐

