使用purrr::map处理按Species列嵌套的iris数据集的筛选与增列操作
解决方法
前置依赖
需要使用tidyverse套件,内置purrr、dplyr、tidyr等所需工具,加载方式如下:
library(tidyverse)
如果你已经完成了iris数据集按Species列的分组嵌套,可直接跳过下方嵌套生成步骤。嵌套数据集的参考生成代码:
nested_iris <- iris %>% group_by(Species) %>% nest()
生成的nested_iris每行对应一个物种,data列存储对应物种的子数据框。
核心处理代码
使用purrr::map遍历所有分组子数据框,一次性完成筛选和新列计算:
processed_nested <- nested_iris %>% mutate(processed_data = map(data, ~ .x %>% # 按条件筛选行 filter(Sepal.Length > 5) %>% # 新增两列求和的字段 mutate(Sepal_Petal_Sum = Sepal.Length + Petal.Length)))
结果导出(可选)
如果需要将处理后的嵌套数据转为普通非嵌套格式,执行unnest操作即可:
processed_iris <- processed_nested %>% unnest(processed_data)
代码说明
map的第二个参数用公式语法定义每个子数据框的处理逻辑,.x代指当前遍历到的单个物种子数据框- 筛选和新增列的执行顺序可根据需求调整,若先计算新列再筛选也可正常运行
- 处理结果单独存储在
processed_data列,不会覆盖原始的分组数据,需要时可删除原始data列节省空间
内容的提问来源于stack exchange,提问作者Dahham
相关产品推荐
相关产品推荐

