将分组的数据帧传递给 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(.))
我正在尝试从 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(.))