如何基于另一列扩展数据列?实现子项后紧跟母项
解决方案
你可以通过分组处理每个家庭,在每组孩子的行之后添加母亲的记录,用tidyverse工具就能实现:
library(tidyverse) # 原始数据 mydata <- tribble( ~id, ~child, ~mother, 1, "John", "Jane", 1, "George", "Jane", 2, "Matthew", "Angela", 3, "Gwel", "Macrine", 3, "Tim", "Macrine", 3, "Jim", "Macrine" ) # 生成目标数据 newdata <- mydata %>% group_by(id) %>% group_modify(function(.data, .group) { # 生成当前组的母亲行 mother_row <- tibble( id = .group$id, child = first(.data$mother), mother = NA ) # 合并原孩子行与母亲行 bind_rows(.data, mother_row) }) %>% ungroup() # 查看结果 print(newdata)
代码说明:
group_by(id):按家庭ID分组,保证同一家庭的成员被统一处理group_modify():对每个分组单独操作,.data指代当前组的原始数据,.group包含当前组的ID信息- 同一家庭的母亲名字一致,用
first(.data$mother)直接提取该组的母亲名字即可 bind_rows()将原组的孩子记录和新增的母亲记录合并ungroup()取消分组,得到完整的目标数据集
运行后得到的结果和你给出的newdata完全一致。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

