R语言实现新增列填充匹配指定前缀的最近行的名称及编码值
R 实现带层级的行政区字段填充方案
我们可以借助tidyverse套件中的dplyr和tidyr工具高效完成需求,核心逻辑是先标记层级行、再向下填充缺失值,全程不需要循环,处理万行级数据也不会有性能问题。
第一步:加载依赖包
library(tidyverse)
第二步:核心处理代码
result <- example2 %>% # 给对应层级的行填充值,非对应层级行暂时设为NA mutate( # 匹配以"- "开头的州(canton)行 canton = ifelse(str_starts(municipality_name, fixed("- ")), municipality_name, NA_character_), canton_code = ifelse(str_starts(municipality_name, fixed("- ")), municipality_code, NA_character_), # 匹配以">> "开头的区(bezirk)行 bezirk = ifelse(str_starts(municipality_name, fixed(">> ")), municipality_name, NA_character_), bezirk_code = ifelse(str_starts(municipality_name, fixed(">> ")), municipality_code, NA_character_) ) %>% # 向下填充所有NA值,自动取当前行之前最后一个非NA的层级值 fill(canton, canton_code, bezirk, bezirk_code, .direction = "down")
补充说明
如果你需要让州行也能匹配到紧跟在后面的区值(比如你给出的预期输出里第一行的bezirk也有值),只需要把fill的direction参数改为"downup",就会先向下填充再向上填充首行的空缺。如果你的数据层级顺序固定为「州→区→街道」,上述代码可以直接复用。
内容的提问来源于stack exchange,提问作者AntVal
相关产品推荐
相关产品推荐

