如何在R中编写函数按指定列值拆分dataframe并生成新数据框
报错原因梳理
- 缺少数据集参数:函数未将要处理的数据集作为入参,内部硬编码
df,如果运行环境中不存在名为df的变量会直接报错,也无法适配不同输入数据集的需求。 - 卷曲运算符
{{}}使用错误:{{}}是tidyverse生态下专门用于函数内承接裸列名参数的语法糖,需要直接用在tidyverse动词的参数位置,不能和基础R的方括号取列语法df[col]混用。 - 管道逻辑错误:
group_by的首个入参应为完整数据框,你当前的写法直接将单列数据传入group_by,不符合函数参数要求,管道也没有正确承接上游的数据集输入。
修正后的函数实现
版本1:支持裸列名调用(和原生dplyr用法一致)
library(dplyr) library(palmerpenguins) variable_isolation <- function(data, group_col){ data %>% group_by({{group_col}}) %>% group_split({{group_col}}) } # 调用测试,和你预期的原生代码效果完全一致 result <- variable_isolation(penguins, species)
调用后返回的是列表,每个元素对应一个species分组的dataframe。
版本2:支持字符串列名调用
如果需要传入字符串格式的列名,可以用.data代词实现:
variable_isolation <- function(data, group_col_str){ data %>% group_by(.data[[group_col_str]]) %>% group_split(.data[[group_col_str]]) } # 调用测试 result <- variable_isolation(penguins, "species")
内容的提问来源于stack exchange,提问作者jgray1801
相关产品推荐
相关产品推荐

