You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用left_join()合并GEM、Hofstede、GPS国家数据集的正确性咨询

数据集合并优化方案

你现有的合并逻辑整体是正确的,核心思路(统一用ISO3作为主键关联三个数据集)是合理的,以下是可优化的点和完整实现方案:


现有逻辑的可改进点

  • 未做ISO3编码匹配校验:countrycode转换国家名时可能因为别名、拼写差异出现匹配失败生成NA,需要提前排查修正
  • 未处理无效占位符:三个数据集里的.属于无效占位值,直接合并会被误认为有效编码,需要提前替换为NA并过滤
  • 未做结果校验:合并后缺少匹配成功率的统计,无法确认多少国家实现了完整关联
  • 未处理重复列名:Hofstede和GPS都有country字段,直接合并会自动加后缀混淆,可提前规范命名

优化后完整代码

library(dplyr)
library(countrycode)

# 1. 预处理GEM数据集
clean_GemData <- new_GemData %>%
  # 替换cntry列的无效.为NA
  mutate(cntry = na_if(cntry, ".")) %>%
  # 过滤无有效ISO3编码的行
  filter(!is.na(cntry))

# 2. 预处理Hofstede数据集
clean_Hofstede <- new_Hofstede %>%
  # 所有列的无效.替换为NA
  mutate(across(everything(), ~na_if(.x, "."))) %>%
  # 转换国家名到ISO3编码
  mutate(iso3 = countrycode(country, origin = "country.name", destination = "iso3c"))
# 打印匹配失败的国家,可手动补全编码
cat("Hofstede中ISO3匹配失败的国家列表:\n")
print(clean_Hofstede %>% filter(is.na(iso3)) %>% select(country))

# 3. 预处理GPS数据集
clean_GpsData <- new_GpsData %>%
  # 统一ISO3编码为大写,避免大小写不匹配
  mutate(isocode = toupper(isocode)) %>%
  # 重命名主键方便合并
  rename(iso3 = isocode, country_gps = country)

# 4. 合并数据集
# 若需要保留所有三个数据集的国家,把left_join替换为full_join即可
all_data <- clean_Hofstede %>%
  left_join(clean_GemData, by = c("iso3" = "cntry")) %>%
  left_join(clean_GpsData, by = "iso3")

# 5. 合并结果校验
cat("合并后总有效行数:", nrow(all_data %>% filter(!is.na(iso3))), "\n")
cat("三个数据集全部匹配成功的国家数:", nrow(all_data %>% filter(!is.na(all_tea) & !is.na(patience))), "\n")

额外优化建议

  • 遇到匹配失败的国家,可以给countrycode加custom_match参数自定义匹配规则,比如custom_match = c("朝鲜" = "PRK")
  • 如果需要指定重复列的后缀,可以在join时加suffix参数,比如left_join(clean_GpsData, by = "iso3", suffix = c("_hofstede", "_gps"))
  • 若后续需要剔除匹配不完整的行,可以加filter(!is.na(all_tea), !is.na(patience))过滤

内容的提问来源于stack exchange,提问作者Liam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:04