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

R语言如何通过循环按不同列匹配两个dataframe并生成哑变量

实现方案(R语言)

首先先预处理数据,修正df_key中keyword2列的多余空格,避免匹配失败:

library(dplyr)
library(tidyr)

# 预处理关键字列的首尾空格
df_key <- df_key %>% mutate(across(starts_with("keyword"), trimws))

方法1:tidyverse高效实现(推荐,无需手动写for循环)

# 1. 长表转换+匹配国家+宽表还原
df_result <- df_key %>%
  # 把所有keyword列转为长表格式
  pivot_longer(cols = starts_with("keyword"), names_to = "keyword_idx", values_to = "city") %>%
  # 关联国家城市对应表匹配国家
  left_join(df_country, by = "city") %>%
  # 提取关键字的序号,比如keyword1提取数字1
  mutate(keyword_idx = gsub("keyword", "", keyword_idx)) %>%
  # 转回宽表还原成预期输出结构
  pivot_wider(names_from = keyword_idx, 
              values_from = c(city, country),
              names_glue = "{ifelse(.value=='city','keyword','country')}_{.name}") %>%
  # 按使用习惯排列列顺序
  select(country_election, 
         keyword_1, country_1,
         keyword_2, country_2,
         keyword_3, country_3,
         keyword_4, country_4,
         keyword_5, country_5)

# 2. 生成哑变量:1代表对应country_i和country_election相等,0代表不等
df_final <- df_result %>%
  mutate(across(starts_with("country_"), 
                ~as.integer(.x == country_election),
                .names = "dummy_{.col}"))

方法2:for循环实现(符合你最初的循环实现需求)

# 复制原始表作为结果基底
df_result <- df_key
# 遍历5个keyword列逐一处理
for (i in 1:5) {
  kw_col <- paste0("keyword", i)
  # 匹配对应国家
  df_result[[paste0("country_", i)]] <- df_country$country[match(df_result[[kw_col]], df_country$city)]
  # 生成对应哑变量
  df_result[[paste0("dummy_country_", i)]] <- as.integer(df_result[[paste0("country_", i)]] == df_result$country_election)
}

# 可选:调整列顺序到直观格式
df_result <- df_result[, c("country_election",
                           "keyword1", "country_1", "dummy_country_1",
                           "keyword2", "country_2", "dummy_country_2",
                           "keyword3", "country_3", "dummy_country_3",
                           "keyword4", "country_4", "dummy_country_4",
                           "keyword5", "country_5", "dummy_country_5")]

两种方法输出的结果都包含匹配后的国家列和对应哑变量,可直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:27:03