R语言如何按唯一城市匹配将向量填充到数据框指定列的NA值
R数据集NA值按唯一分组批量填充方案
报错原因
直接对NA行整体赋值的操作触发长度不匹配报错:is.na(join_pop1$UK_Districts.y)筛选出的待填充行共132行,而备用名称向量pop_names仅33个元素,二者长度不一致无法直接赋值。
核心解决逻辑
33个备用名称和UK_Districts.x列的33个唯一城市值一一对应,只需将每个唯一城市值和对应的备用名称绑定,再批量映射到整列即可完成填充。
实现代码
基础R写法
# 提取唯一城市列表,顺序和pop_names一一对应 unique_cities <- unique(join_pop1$UK_Districts.x) # 按城市匹配填充 join_pop1$UK_Districts.y <- pop_names[match(join_pop1$UK_Districts.x, unique_cities)]
更稳妥的映射写法(避免顺序错位)
如果担心唯一城市顺序和pop_names顺序不匹配,可以提前构造命名映射向量:
# 构造"城市原始名:备用名"的键值对映射 name_map <- setNames(pop_names, unique(join_pop1$UK_Districts.x)) # 按键匹配填充 join_pop1$UK_Districts.y <- name_map[join_pop1$UK_Districts.x]
dplyr写法(适配tibble操作习惯)
library(dplyr) join_pop1 <- join_pop1 %>% mutate(UK_Districts.y = pop_names[match(UK_Districts.x, unique(UK_Districts.x))])
效果验证
运行后输出完全符合预期,前10行结果如下:
| UK_Districts.x | UK_Districts.y |
|---|---|
| Abertawe - Swansea | Swansea |
| Abertawe - Swansea | Swansea |
| Abertawe - Swansea | Swansea |
| Abertawe - Swansea | Swansea |
| Brent London Boro | Brent |
| Brent London Boro | Brent |
| Brent London Boro | Brent |
| Brent London Boro | Brent |
| Bro Morgannwg - the Vale of Glamorgan | Vale of Glamorgan |
| Bro Morgannwg - the Vale of Glamorgan | Vale of Glamorgan |
内容的提问来源于stack exchange,提问作者Stackcans
相关产品推荐
相关产品推荐

