R语言data.table操作:如何删除数值型state列每个值的最后两位
解决方案
针对数值型的FIPS编码列,有两种常用的处理思路,都可以实现删除最后两位的需求:
方法1:整数除法(推荐,性能更高)
直接对数值列做整数除法,除以100后自动舍去小数部分,刚好得到去掉最后两位的结果,适合所有4位FIPS编码的处理场景:
# 基础R写法 df$state <- df$state %/% 100 # dplyr写法 library(dplyr) df <- df %>% mutate(state = state %/% 100) # data.table写法(你的示例数据为data.table格式) library(data.table) setDT(df) df[, state := state %/% 100]
方法2:类型转换后使用字符串截取
如果你更熟悉字符串处理的逻辑,可以先把数值列转成字符型,截取除最后两位外的部分后再转回数值即可:
# 基础R写法 df$state <- as.integer(substr(as.character(df$state), 1, nchar(as.character(df$state)) - 2)) # dplyr + stringr写法 library(dplyr) library(stringr) df <- df %>% mutate(state = as.integer(str_sub(as.character(state), 1, -3)))
两种方法处理后得到的state列都是数值型,可直接匹配其他数据集的对应字段。
内容的提问来源于stack exchange,提问作者AaronSzcz
相关产品推荐
相关产品推荐

