在R中如何重构数据集,为子分类匹配对应的父分类编码及名称
实现方法
你可以基于R的tidyverse工具链实现需求,考虑到你的数据中存在相同3位编码B00对应两个不同父分类名称的情况,我们可以利用「父分类行在前、对应子分类行紧随其后」的数据集结构来处理,具体代码如下:
library(tidyverse) df2 <- df %>% # 标记当前行是否为父分类行 mutate(is_parent = nchar(subcateg) == 3) %>% # 每遇到一个父分类就生成新的组ID,同组内为同一个父分类和它的子分类 mutate(group_id = cumsum(is_parent)) %>% # 组内填充父分类的编码和名称 group_by(group_id) %>% mutate( categ = first(subcateg[is_parent]), names2 = first(names[is_parent]) ) %>% # 清理多余列,仅保留子分类行 ungroup() %>% filter(!is_parent) %>% select(subcateg, names, categ, names2)
逻辑说明
- 先通过字符长度区分父分类行和子分类行
- 用累积和函数
cumsum给每组从属的父子分类分配相同组ID,解决同编码对应不同分类名的匹配问题 - 组内填充父分类的编码和名称后,过滤掉原父分类行即可得到你需要的结果
- 如果你的数据集后续可能出现顺序打乱的情况,需要额外补充字段标识父子分类的从属关系,再通过关联映射表的方式处理即可。
内容的提问来源于stack exchange,提问作者Magdalena Cortina
相关产品推荐
相关产品推荐

