使用R语言dplyr合并两个CSV文件并去重生成未联系受访者名单
R语言筛选未联系调研受访者操作指南
前置说明
我们可以用两种方法实现:基础R无需安装额外包,或者用tidyverse套件语法更简洁易懂,更适合入门用户。
步骤1:读取两份CSV文件
基础R写法
# 读取尚未发起调研的受访者名单 raw_contacts <- read.csv("你的第一份文件路径.csv", stringsAsFactors = FALSE) # 读取已完成联系的受访者名单 completed_contacts <- read.csv("你的第二份文件路径.csv", stringsAsFactors = FALSE)
tidyverse写法(需先运行install.packages("tidyverse")安装包)
library(tidyverse) raw_contacts <- read_csv("你的第一份文件路径.csv") completed_contacts <- read_csv("你的第二份文件路径.csv")
注意:请将代码中的文件路径替换为你本地CSV的实际存储路径,优先使用绝对路径避免读取失败
步骤2:筛选仅未联系的受访者
核心逻辑是保留初始未联系名单中,不存在于已联系名单的记录,两份数据需要有唯一标识列(比如受访者ID、手机号,能唯一确定一个人的字段)做匹配,假设这个共同列叫respondent_id,你可以替换成自己实际的列名。
基础R写法
# 筛选出raw_contacts中respondent_id不在completed_contacts里的记录 uncontacted <- raw_contacts[!raw_contacts$respondent_id %in% completed_contacts$respondent_id, ]
tidyverse写法(更直观)
# 反连接:保留左表(raw_contacts)中无法和右表匹配的所有记录 uncontacted <- raw_contacts %>% anti_join(completed_contacts, by = "respondent_id")
如果需要用多个字段匹配,可将by参数改成by = c("手机号", "姓名")的格式
步骤3:导出结果到新CSV
基础R写法
write.csv(uncontacted, "未联系受访者最终名单.csv", row.names = FALSE)
tidyverse写法
write_csv(uncontacted, "未联系受访者最终名单.csv")
row.names = FALSE参数用于避免导出额外的行号列,tidyverse的write_csv默认不导出行号
常见问题排查
- 匹配结果和预期行数不一致时,先检查两份文件的唯一标识列格式是否一致,比如字符型的"001"和数值型的1会被判定为不同值
- 导出前可以先运行
nrow(raw_contacts) - nrow(completed_contacts)估算预期结果行数,运行nrow(uncontacted)核对是否符合预期 - 可以运行
head(uncontacted)预览前几行数据,确认内容无误再导出使用
内容的提问来源于stack exchange,提问作者agodinezmm
相关产品推荐
相关产品推荐

