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

在R中遍历数据框两列所有行,基于所属向量生成新列的实现方法

解决方案

你可以通过构建国家-大陆映射表快速生成目标列,这种方法简洁且扩展性强;也可以用ifelse直接判断,适合简单场景。以下是具体实现:

先准备示例数据(和你的输入一致)

# 示例数据框
df <- data.frame(
  Country1 = c("France", "Spain", "Nigeria", "Austria", "Cameroon", "France"),
  Country2 = c("Austria", "Nigeria", "Italy", "Nigeria", "France", "Spain"),
  stringsAsFactors = FALSE
)

# 大陆向量
Continent_Europe = c("Spain",  "Austria", "France", "Italy", "Germany", "Denmark")
Continent_Africa = c("Nigeria", "Cameroon", "Botswana", "Angola")

方法1:构建映射表(推荐,扩展性好)

先把两个大陆的国家合并成一个命名向量,键为国家名称,值为对应的大陆:

# 创建国家-大陆映射
continent_map <- c(
  setNames(rep("Europe", length(Continent_Europe)), Continent_Europe),
  setNames(rep("Africa", length(Continent_Africa)), Continent_Africa)
)

然后直接通过映射生成新列:

# 生成Country1对应的大陆列
df$Country1_Continent <- continent_map[df$Country1]
# 生成Country2对应的大陆列
df$Country2_Continent <- continent_map[df$Country2]

方法2:用ifelse直接判断(简单直接)

如果不需要考虑后续扩展,直接用%in%判断国家所属向量:

df$Country1_Continent <- ifelse(df$Country1 %in% Continent_Europe, "Europe", "Africa")
df$Country2_Continent <- ifelse(df$Country2 %in% Continent_Europe, "Europe", "Africa")

方法3:tidyverse管道风格(适合dplyr用户)

如果你习惯用dplyr的管道操作:

library(dplyr)

df <- df %>%
  mutate(
    Country1_Continent = continent_map[Country1],
    Country2_Continent = continent_map[Country2]
  )

运行以上任意方法后,你都会得到期望的结果:

Country1 Country2 Country1_Continent Country2_Continent
1   France  Austria             Europe             Europe
2    Spain  Nigeria             Europe             Africa
3  Nigeria    Italy             Africa             Europe
4  Austria  Nigeria             Europe             Africa
5 Cameroon   France             Africa             Europe
6   France    Spain             Europe             Europe

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:48:16