在R中如何合并数据框对应行以按城市统计酒店总数量
R按城市合并行并统计酒店总数的实现方案
首先构造初始数据框:
df <- data.frame( Streets = c("Muscow tweede","Muscow NDSM", "kazan Bo", "Kazan Ca"), Hotels = c(5,9,4,3) )
核心思路是先从街道字段中提取统一格式的城市名,再按城市分组对酒店数求和,以下是两种常用实现方式:
方法1:基础R实现
无需安装额外依赖,直接用基础函数完成:
# 提取街道首单词作为城市名,统一首字母大写避免大小写不匹配问题 df$city <- gsub("^(\\w+) .*", "\\U\\1", df$Streets, perl = TRUE) # 按城市分组聚合酒店总数 aggregate(Hotels ~ city, data = df, FUN = sum)
输出结果:
city Hotels 1 Kazan 7 2 Muscow 14
方法2:tidyverse生态实现
使用dplyr+stringr的语法更易读,适合复杂数据处理场景:
library(dplyr) library(stringr) df %>% # 提取首单词作为城市名,统一首字母大写 mutate(city = str_to_title(str_extract(Streets, "^\\w+"))) %>% # 按城市分组求和 group_by(city) %>% summarise(total_hotels = sum(Hotels))
扩展:街道命名无规律场景的解决方案
如果街道名没有统一的「城市名在前」规则,可以自定义映射表匹配城市,灵活性更高:
# 自定义街道-城市映射关系 city_mapping <- c( "Muscow tweede" = "Muscow", "Muscow NDSM" = "Muscow", "kazan Bo" = "Kazan", "Kazan Ca" = "Kazan" ) df$city <- city_mapping[as.character(df$Streets)] # 后续按常规方法聚合即可
内容的提问来源于stack exchange,提问作者Jackson24562
相关产品推荐
相关产品推荐

