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

R语言处理混存国家与城市的列:为城市匹配对应国家

解决方法:用tidyverse填充并过滤数据

别担心,既然你已经能区分哪些行是国家、哪些是城市,那剩下的操作其实非常直观!咱们用R里的tidyverse工具链就能快速得到你想要的结果。

步骤1:回顾你的原始数据

先确认下你的初始数据结构(用你提供的示例):

library(tibble)
countries <- tibble( city = c('Belgium', 'Bruxelles', 'Antwerpen', 'Bulgaria', 'Sofia', 'Plovdiv') )

步骤2:整合你的标记逻辑

假设你已经有了判断国家行的逻辑(比如生成了一个is_country列,TRUE代表这一行是国家名称),先把这个标记列加到数据框里:

library(dplyr)
# 这里替换成你实际的标记逻辑,比如你可能用了正则/预设列表来判断
countries <- countries %>%
  mutate(is_country = city %in% c('Belgium', 'Bulgaria'))

步骤3:填充国家名称并过滤

接下来是核心操作:先把国家行的名称赋值给新的country列,然后用fill()把这个值向下填充到后续的城市行,最后过滤掉原来的国家行即可:

library(tidyr)

final_result <- countries %>%
  # 给国家行的country列赋值,非国家行暂时设为NA
  mutate(country = ifelse(is_country, city, NA)) %>%
  # 向下填充country列的NA值,用最近的上方国家名称覆盖
  fill(country, .direction = "down") %>%
  # 只保留城市行,去掉原来的国家行
  filter(!is_country) %>%
  # 调整列顺序,让city在前,country在后
  select(city, country)

最终结果

运行完上面的代码后,你会得到想要的数据框:

print(final_result)
# # A tibble: 4 × 2
#   city      country
#   <chr>     <chr>  
# 1 Bruxelles Belgium
# 2 Antwerpen Belgium
# 3 Sofia     Bulgaria
# 4 Plovdiv   Bulgaria

小提示

如果你的国家判断逻辑不是用%in%,而是其他方式(比如正则匹配国家名称的特征),只需要替换mutate(is_country = ...)里的逻辑就行,核心的填充和过滤步骤完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:57:39