在R中合并三个世界杯相关CSV文件遇问题求助
R合并三个世界杯CSV文件的解决方案
问题根源分析
出现0行结果或重复行的核心原因通常是两个:
- Country列字符串格式不统一:比如大小写差异(
USAvsusa)、前后空格(USAvsUSA)、拼写变体(South KoreavsKorea, South),导致merge时无法匹配条目。 - 单文件内Country重复:某个CSV里同一个国家存在多条记录,合并后会生成重复行。
解决步骤
1. 标准化Country列格式
先对三个文件的Country列做统一清理,消除格式差异:
G <- read.csv("G.csv", fileEncoding="UTF-8-BOM") GG <- read.csv("GG.csv", fileEncoding="UTF-8-BOM") LL <- read.csv("LL.csv", fileEncoding="UTF-8-BOM") # 去除前后空格+转成小写,统一匹配规则 G$Country <- trimws(tolower(G$Country)) GG$Country <- trimws(tolower(GG$Country)) LL$Country <- trimws(tolower(LL$Country))
2. 处理单文件内的重复Country(按需)
如果某个文件里同一个国家有多条记录,先去重(默认保留第一条,可按需调整):
# 基础R去重方式 GG <- GG[!duplicated(GG$Country), ] LL <- LL[!duplicated(LL$Country), ] G <- G[!duplicated(G$Country), ] # 或用dplyr更直观(需先加载包) # install.packages("dplyr") # library(dplyr) # GG <- distinct(GG, Country, .keep_all = TRUE)
3. 合并三个文件
方法一:基础R的merge函数
逐步合并,指定all.x = TRUE可保留G文件里的所有国家(若需保留所有文件的国家,改用all = TRUE):
# 先合并G和GG merged1 <- merge(G, GG, by = "Country", all.x = TRUE) # 再合并LL final_df <- merge(merged1, LL, by = "Country", all.x = TRUE)
方法二:dplyr链式合并(更简洁)
习惯tidyverse风格的话,用left_join逻辑更清晰:
install.packages("dplyr") # 首次使用需安装 library(dplyr) final_df <- G %>% left_join(GG, by = "Country") %>% left_join(LL, by = "Country")
4. 导出合并后的CSV
write.csv(final_df, "merged_worldcup_data.csv", row.names = FALSE, fileEncoding = "UTF-8-BOM")
验证结果
可以通过head(final_df)或table(final_df$Country)查看合并后的数据,确认是否存在重复或缺失的国家条目。
内容的提问来源于stack exchange,提问作者Adr0
相关产品推荐
相关产品推荐

