如何在R语言dplyr的mutate函数内调用管道占位符_?
在dplyr的mutate函数内调用管道占位符的正确方式
你遇到的报错是因为在mutate()参数里直接用管道占位符_不符合dplyr的语法规则——mutate()默认在数据框的列/分组上下文里执行计算,这里的_会被错误解析成字符串字面量,而非管道传递的完整数据集。
正确实现方式
如果需要在mutate()里调用像nrow()这类需要完整数据集的函数,有两种靠谱的写法:
- 使用
.引用整个输入数据集
library(dplyr) iris |> mutate(n_rows = nrow(.))
.在dplyr动词内部代表当前传入的完整数据框,能正确传递给nrow()获取总行数。
- 使用dplyr专用函数
cur_data_all()(推荐)
library(dplyr) iris |> mutate(n_rows = nrow(cur_data_all()))
cur_data_all()是dplyr提供的专门获取当前完整数据集的函数,不受分组操作影响,语法更规范。
额外提示
如果你的需求是获取分组后的每组行数,不用手动调用nrow(),直接用dplyr内置的n()函数更简洁:
iris |> group_by(Species) |> mutate(group_rows = n())
内容的提问来源于stack exchange,提问作者dzegpi
相关产品推荐
相关产品推荐

