如何在R的DataFrame中为市政数据匹配对应Nut III层级列
在R中为DataFrame匹配对应Nut III层级的解决方案
核心思路
先提取所有Nut III行的层级名称,向下填充到后续的Municipal行中,最后清空Nut III行的Nut列即可。
使用dplyr包实现(推荐)
dplyr的链式操作可以简洁完成需求:
library(dplyr) # 假设你的数据框名为df df <- df %>% # 为Nut III行赋值层级名称,其余行暂存为NA mutate(Nut = if_else(`geo-group` == "Nut III", nuts_municipal, NA_character_)) %>% # 向下填充NA,让Municipal行继承最近的Nut III值 fill(Nut, .direction = "down") %>% # 清空Nut III行的Nut列 mutate(Nut = if_else(`geo-group` == "Nut III", "", Nut))
使用基础R + zoo包实现
如果偏好基础R语法,可以借助zoo包的填充函数:
# 需要先安装并加载zoo包 install.packages("zoo") library(zoo) # 假设你的数据框名为df df$Nut <- NA_character_ # 标记Nut III行的位置 nut_iii_idx <- df$`geo-group` == "Nut III" # 为Nut III行的Nut列赋值 df$Nut[nut_iii_idx] <- df$nuts_municipal[nut_iii_idx] # 向下填充NA值 df$Nut <- na.locf(df$Nut) # 清空Nut III行的Nut列 df$Nut[nut_iii_idx] <- ""
效果验证
处理后的数据会和你给出的目标表结构一致:Nut III行的Nut列为空,所有下属Municipal行都会匹配到对应的Nut III层级名称,方便后续按Nut分组分析。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

