使用dplyr的mutate函数为数据框求和列时报错的问题咨询
问题分析与修复方案
错误成因
你碰到的这个报错,本质是dplyr的mutate()函数要求必须先指定要操作的目标数据框,也就是它的第一个参数.data。你的代码里直接写了total_sum = sum(orders$numbers),完全没把orders数据框传给mutate(),函数根本不知道要处理哪份数据,所以才会抛出".data参数缺失,无默认值"的错误。
修复方法
这里有两种符合dplyr规范的正确写法,推荐用第一种链式编程的方式,代码可读性更强:
方式1:使用管道符%>%(推荐)
管道符的作用是把前面的数据对象传递给后面的函数,完美适配dplyr的操作风格:
library(dplyr) # 把结果重新赋值给orders,也可以换个新变量名避免覆盖原数据 orders <- orders %>% mutate(total_sum = sum(numbers))
这里orders %>%会自动把数据框传入mutate(),函数就能识别要操作的数据集,然后计算numbers列的整体总和,生成新列total_sum。
方式2:直接传入数据框作为第一个参数
如果暂时不习惯管道符,也可以直接把orders作为mutate()的第一个参数传入:
library(dplyr) orders <- mutate(orders, total_sum = sum(numbers))
这个写法和管道版的功能完全一致,只是语法形式不同。
小补充:这样生成的total_sum列,每一行的值都会是numbers列的总和(因为sum(numbers)是对整个列求和)。如果你的需求是分组求和,只需要在mutate()前加上group_by(分组列名)即可,不过从你的问题描述来看,应该是要整列的总和,所以上面的写法就足够啦。
内容的提问来源于stack exchange,提问作者A.Coder47
相关产品推荐
相关产品推荐

