将分组的数据帧传递给 dplyr 中自己的函数

pass grouped dataframe to own function in dplyr

我正在尝试从 plyr 转移到 dplyr。但是,我似乎仍然无法弄清楚如何在链式 dplyr 函数中调用自己的函数。

我有一个带有分解 ID 变量和顺序变量的数据框。我想按 ID 拆分框架,按顺序变量对其进行排序,然后在新列中添加一个序列。

我的 plyr 函数如下所示:

f <- function(x) cbind(x[order(x$order_variable), ], Experience = 0:(nrow(x)-1))
data <- ddply(data, .(ID_variable), f)

在 dplyr 中,虽然这应该看起来像这样

f <- function(x) cbind(x[order(x$order_variable), ], Experience = 0:(nrow(x)-1))
data <- data %>% group_by(ID_variable) %>% f

谁能告诉我如何修改我的 dplyr 调用以成功传递我自己的函数并获得我的 plyr 函数提供的相同功能?

编辑: 如果我使用这里描述的 dplyr 公式,它确实将一个对象传递给 f。然而,虽然 plyr 似乎传递了许多不同的 tables(由 ID 变量分割),但 dplyr 并没有传递一个 table 每组而是整个 table (作为某种dplyr 对象,其中注释了组),因此当我 cbind Experience 变量时,它会附加一个从 0 到整个 table 而不是单个组的长度的计数器。

我找到了一种使用这种方法在 dplyr 中获得相同功能的方法:

data <- data %>%
    group_by(ID_variable) %>%
    arrange(ID_variable,order_variable) %>% 
    mutate(Experience = 0:(n()-1))

但是,我仍然热衷于学习如何将分成不同 table 的分组变量传递给 dplyr 中的自有函数。

致那些从 google 来到这里的人。假设您编写了自己的打印函数。

printFunction <- function(dat) print(dat)
df <- data.frame(a = 1:6, b = 1:2)

如这里所问

df %>% 
    group_by(b) %>% 
    printFunction(.)

打印全部数据。要让 dplyr 打印多个表格分组,你应该使用 do

df %>% 
    group_by(b) %>% 
    do(printFunction(.))