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

Phi*_*hil 6 r plyr 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)
Run Code Online (Sandbox Code Playgroud)

在dplyr我虽然看起来应该是这样的

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

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

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

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

data <- data %>%
    group_by(ID_variable) %>%
    arrange(ID_variable,order_variable) %>% 
    mutate(Experience = 0:(n()-1))
Run Code Online (Sandbox Code Playgroud)

但是,我仍然希望学习如何将分组变量分成不同的表传递给dplyr中的函数.

Kip*_*čys 6

对于那些从谷歌到这里的人.假设您编写了自己的打印功能.

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

正如在这里被问到的那样

df %>% 
    group_by(b) %>% 
    printFunction(.)
Run Code Online (Sandbox Code Playgroud)

打印整个数据.要获得dplyr打印多个分组的表,您应该使用do

df %>% 
    group_by(b) %>% 
    do(printFunction(.))
Run Code Online (Sandbox Code Playgroud)