在R语言中拆分复杂City列并补全Milwaukee缺失数据的方法
解决方案:拆分城市列并补全缺失数据
使用tidyverse工具链可以高效完成需求,以下是最简实现代码:
library(tidyverse) # 原始数据 df1 <- tibble::tribble(~City, ~Population, "United Kingdom > Leeds", 1500000, "Spain > Las Palmas de Gran Canaria", 200000, "Canada > Nanaimo, BC", 150000, "Canada > Montreal", 250000, "United States > Minneapolis, MN", 700000, "United States > Milwaukee, WI", NA, "United States > Milwaukee", 400000) # 数据清洗流程 df_cleaned <- df1 %>% # 拆分国家与城市(含州)部分 separate(City, into = c("Country", "City_State"), sep = " > ") %>% # 拆分城市与州,无对应州时填充NA separate(City_State, into = c("City", "State"), sep = ", ", fill = "right") %>% # 按国家+城市分组,补全缺失的州和人口数据 group_by(Country, City) %>% mutate( State = first(na.omit(State)), Population = first(na.omit(Population)) ) %>% ungroup() %>% # 可选:去除重复行 distinct()
代码说明
- 拆分列:
- 先用
separate按" > "将City列拆分为Country和City_State(城市+州的组合字符串)。 - 再对
City_State按", "拆分,通过fill = "right"让无州信息的行自动给State列填充NA。
- 先用
- 补全缺失值:
- 按
Country和City分组,确保处理的是同一城市的记录。 - 用
first(na.omit(xxx))提取组内第一个非NA值,统一填充该组的缺失数据——既补全了Milwaukee的State为WI,也把其NA的Population替换为400000。
- 按
- 去重(可选):最后用
distinct()去除重复的城市记录,得到唯一的清洗后数据集。
处理后的最终数据集示例:
| Country | City | State | Population |
|---|---|---|---|
| United Kingdom | Leeds | NA | 1500000 |
| Spain | Las Palmas de Gran Canaria | NA | 200000 |
| Canada | Nanaimo | BC | 150000 |
| Canada | Montreal | NA | 250000 |
| United States | Minneapolis | MN | 700000 |
| United States | Milwaukee | WI | 400000 |
内容的提问来源于stack exchange,提问作者Alexander Shemetev
相关产品推荐
相关产品推荐

