R语言如何匹配两个CSV的指定列并为CSV_A新增列填充对应值
R语言实现方案
问题说明
你的现有脚本错误地直接覆盖了CSV_A的Shipping_ID列,未新增目标列提取CSV_B的Previous Status值,因此无法得到预期结果。
完整实现代码(tidyverse版,适配你已加载的依赖)
library(tidyverse) # 配置文件路径 csv_a_path <- 'C:/Users/Userid/Desktop/csv/CSV_A.csv' csv_b_path <- 'C:/Users/Userid/Desktop/csv/CSV_B.csv' output_path <- 'C:/Users/Userid/Desktop/csv/modified_CSV_A.csv' # 替换为你的实际导出路径 # 读取文件,check.names=FALSE保留原列名的空格 csv_a <- read.csv(csv_a_path, check.names = FALSE) csv_b <- read.csv(csv_b_path, check.names = FALSE) # 关联匹配新增列 result <- csv_a %>% left_join( csv_b %>% select(Customer_ID, `Previous Status`), by = c("Shipping_ID" = "Customer_ID") ) %>% rename(`New Column` = `Previous Status`) # 导出结果,na=""将未匹配的空值设为空白,符合预期输出格式 write.csv(result, output_path, row.names = FALSE, na = "")
基础R版实现(无需tidyverse依赖)
如果你不想引入额外依赖,也可以修正你原本的match逻辑实现:
# 读取文件 csv_a <- read.csv('C:/Users/Userid/Desktop/csv/CSV_A.csv', check.names = FALSE) csv_b <- read.csv('C:/Users/Userid/Desktop/csv/CSV_B.csv', check.names = FALSE) # 匹配填充新列 csv_a$`New Column` <- csv_b$`Previous Status`[match(csv_a$Shipping_ID, csv_b$Customer_ID)] # 导出结果 write.csv(csv_a, 'C:/Users/Userid/Desktop/csv/modified_CSV_A.csv', row.names = FALSE, na = "")
注意事项
如果不需要保留列名中的空格,可以去掉check.names = FALSE参数,对应列名需要改为Previous.Status、Current.Status即可正常调用。
内容的提问来源于stack exchange,提问作者Kevin Tracey
相关产品推荐
相关产品推荐

