【发布时间】:2014-08-03 02:09:46
【问题描述】:
我有一个函数可以根据每行中“obsnum”的值(见下面的函数),通过 user_id 计算我的数据框的“保留”和“添加”列。使用 ddply 可以正常工作,但是 ddply 太占用内存,所以有人建议我改用 dplyr 包。这是我在 dplyr 中使用此功能时收到的错误消息。
eval(expr, envir, enclos) 中的错误: “函数”的形式参数列表无效
我对 dplyr 完全陌生,所以我不知道我的函数格式有什么问题,也不知道如何将自定义函数放入 dplyr。我想基于变量“obsnum”将此函数应用于我的数据集中的每一行。该函数需要按 user_id 分组,因此我需要使用 dplyr。
有人可以告诉我让 dplyr 识别我的函数有什么问题吗? 我应该使用 mutate() ,因为我要添加列吗? df1 是我的原始数据框。 df2 是我尝试使用“保留”和“添加”这两个新列创建的数据集。非常感谢你。
df2
group_by(user_id) %.%
function(x) {
x = x[order(x$obsnum), ]
if (length(x$obsnum) == 1) {
x$retained <- FALSE
x$addition <- TRUE
}
else {
x$retained <- c(x$obsnum[1:(length(x$obsnum)-1)] + 1 == x$obsnum[2:length(x$obsnum)], FALSE)
x$addition <- c(TRUE, x$obsnum[2:length(x$obsnum)] != x$obsnum[1:(length(x$obsnum)-1)] + 1)
}
return(x)
}
【问题讨论】:
-
您可能正在寻找函数
do.call(FUNC, list(arguments))另外,请查看data.table包,它允许您通过引用修改数据(更快、更高效),更不用说更简单的语法了 -
非常感谢!记住这一点非常有帮助。我最终首先定义了我的函数,然后进行了安排和 group_by,然后作为第三步调用该函数。可能不是很优雅,但它确实有效。