R语言批量重命名数据框单元格,实现英国警局按地区分组
批量重命名警局为所属地区的解决方案
Hey there! 作为R语言新手处理这么大的犯罪数据集确实挺有挑战的,别担心,咱们来轻松搞定批量重命名的问题~
首先,咱们先明确一个核心:先把需要分组的警局和对应的地区整理成一个对照表,这样以后要改规则或者加新警局都超方便,比一个个改单元格高效太多了!
方法1:用Base R(不用装新包,开箱即用)
如果你不想额外安装包,用Base R的命名向量匹配就很高效,特别适合大数据集:
# 第一步:先搞个「警局-地区」映射表,想加新的直接往下加就行 force_to_region <- c( "Avon and Somerset" = "South West", "Dorset" = "South West", "Gloucester" = "South West", "Wiltshire" = "South West", # 举个例子,你可以继续加其他分组: "Metropolitan Police" = "London", "West Midlands" = "West Midlands" ) # 第二步:批量生成地区列(假设你的警局列名叫"force",记得换成你实际的列名!) # 新增一个region列,保留原force列 crimedata19_20$region <- force_to_region[crimedata19_20$force] # 要是想直接覆盖原有的force列,就用这句: # crimedata19_20$force <- force_to_region[crimedata19_20$force]
如果遇到不在映射表里的警局,上面的代码会返回NA,要是你想处理这些情况(比如保留原名或者标成"Other"),加个简单的判断就行:
crimedata19_20$region <- ifelse( is.na(force_to_region[crimedata19_20$force]), crimedata19_20$force, # 保留原警局名 # 或者改成"Other": # "Other", force_to_region[crimedata19_20$force] )
方法2:用tidyverse的dplyr(语法更直观,新手友好)
如果你习惯用tidyverse的“管道流”语法,case_when()会让分组规则一目了然,特别适合规则多的情况:
先确保你装了dplyr(没装的话先跑第一行):
install.packages("dplyr") library(dplyr)
然后用管道操作批量处理:
crimedata19_20 <- crimedata19_20 %>% mutate( region = case_when( # 把属于South West的警局放一起 force %in% c("Avon and Somerset", "Dorset", "Gloucester", "Wiltshire") ~ "South West", # 继续加其他分组规则,比如: force == "Metropolitan Police" ~ "London", force %in% c("West Midlands", "Staffordshire") ~ "West Midlands", # 最后处理所有没匹配到的情况 TRUE ~ force # 保留原警局名,或者改成"Other"都行 ) )
为啥这两种方法适合你的大数据集?
这俩都是向量化操作,不像逐个改单元格那样循环遍历每一行,速度快到飞起,完全hold得住你合并后的900个文件的大数据集!而且映射规则清晰,以后维护起来超省心。
小提醒:
- 先确认你的警局列叫啥!用
colnames(crimedata19_20)就能看到所有列名,记得把代码里的force换成你实际的列名哈。 - 可以先拿一小部分数据测试!比如用
sample_n(crimedata19_20, 100)抽100行试试,确认替换对了再应用到整个数据集,避免出问题~
内容的提问来源于stack exchange,提问作者Lactuca
相关产品推荐
相关产品推荐

