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

时间:2015-01-28 19:47:34

标签: 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)

在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似乎传递了许多不同的表(由ID变量分割),但是dplyr不会为每个组传递一个表,而是传递ENTIRE表(作为某种类型的dplyr对象,其中组被注释),因此当我cbind时体验变量它将一个计数器从0附加到整个表的长度而不是单个组。

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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(.))